基础问答【一】

c语言

【1】struct和class的区别

  默认继承访问权限,struct默认是public, class默认是privateg

  class可以定义成员函数,struct只能定义成员变量

【2】struct和union的区别

  struct的各个成员拥有自的内存,各自使用互不干扰,同时存在,遵循内存对齐原则:一个struct的总长度等于所有成员长度之和

  union各个成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权,一个union变量的总长度至少能容纳最大的成员变量,而且要满足所有成员变量类型大小的整数倍。

【3】inline内联函数的作用

  内联函数会将代码块嵌入到每个调用该函数的地方,内联函数减少了函数的调用,使代码的执行效率提高,但是会增加目标代码的大小,最终会使程序的代码段占用大量的内存。

【4】模板的优缺点

优点

  • 减少代码的复用,节约程序员时间,也是出现标准库的原因
  • 免费提高安全性能

缺点

  • 只能在编译时才能被确定

 【5】const

  • 修饰常量时,常量不可变
  • 修饰指针时,const在*前,则指针指向的内容为常量,在后则指针本身为常量
  • 修饰内对象时,对象中的任何成员都不能被修改,该对象的任何非const成员函数都不能调用该对象,因为任何非const成员函数都会有修改成员变量的可能
  • 修饰成员变量时,成员变量不能被修改,只能在初始化列表中被初始化,因为常量只能被初始化,不能被赋值
  • 修饰成员函数时,const成员函数不能修改类对象中的任何非const成员变量

c/c++const的区别:

  • c语言中const实质上是只读变量
  • c++中的const是一个真正意义上的变量
  • c++编译器可能为const分配空间
  • c++完全兼容c语言中const常量的语法特性
  • c语言中的const变量是可以通过指针修改,而c++是不可以的

 【6】static

  • 在修饰变量时,static的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束后才释放。
  • static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其他文件中访问,即便是extern外部声明也不可以,
  • static修饰一个函数时,这个函数只能在本文件中调用,不能被其它文件调用。 

c++11特性

【1】auto 自动类型推导

    auto是通过初始化表达式进行类型推导,假设没有初始化表达式,就无法确定类型,不能用作函数传参

    decltype, 是为了解决auto只能对变量进行类型推导的缺陷,是从变量或者表达式中获得类型。

    decltype(表达式)

【2】nullptr

    nullptr的出现目的是为了替代NULL

    传统的c++会把null、0视为同一种东西,这取决于编译器如何定义NULL, 有些编译器会将NULL定义为((void*)0)有些直接将其定义为0.

    c++不允许直接将void * 隐式转换为其它的类型,但是如果NULL被定义为((void*)0), 那么当编译器 char * ch = NULL时, NULL只好被定义为0;

  这会导致重载的特性发生混乱,

  void foo(char *);

  void foo(int);

  对于这两个函数来说,如果NULL又被定义为了0,那么foo(NULL)这个语句将会去调用foo(int),从而导致代码违反直观。

【3】lambda表达式

  实际上提供了一个类似匿名函数的特性,(在需要一个函数,但是又不行去费力去命名一个函数的情况下使用)

【4】右值引用  

  可以实现移动语义和完美转发,消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提供效率

【5】初始化列表

  使用初始化列表来对类进行初始化。

【6】智能指针

  

c++语言

【1】指针和引用的区别

  • 引用是别名,指针是地址
  • 指针可以为NULL,引用不行
  • 引用在创建时必须要初始化,引用到一个有效的对象,指针在定义不必初始化,可以在定义后的任何地方重新赋值,
  • 引用的创建和销毁不会调用类的拷贝构造函数和析构函数

【2】new, delete,     malloc, free区别

  • delete会调用对象的析构函数,new会调用构造函数, c++运算符
  • free只会释放内存,malloc和free是c语言标准库函数,
  • malloc/free无法满足动态对象的要求

 

基础问答【一】

上一篇:初见 | 字符串 | Manacher


下一篇:kustomize简单使用