【1】struct和class的区别
默认继承访问权限,struct默认是public, class默认是privateg
class可以定义成员函数,struct只能定义成员变量
【2】struct和union的区别
struct的各个成员拥有自的内存,各自使用互不干扰,同时存在,遵循内存对齐原则:一个struct的总长度等于所有成员长度之和
union各个成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权,一个union变量的总长度至少能容纳最大的成员变量,而且要满足所有成员变量类型大小的整数倍。
【3】inline内联函数的作用
内联函数会将代码块嵌入到每个调用该函数的地方,内联函数减少了函数的调用,使代码的执行效率提高,但是会增加目标代码的大小,最终会使程序的代码段占用大量的内存。
【4】模板的优缺点
优点
缺点
【5】const
c/c++const的区别:
【6】static
【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】智能指针
【1】指针和引用的区别
【2】new, delete, malloc, free区别
原文:https://www.cnblogs.com/oytt/p/14968588.html