1.nullptr
用于替换NULL,旧版本NULL和0等价;
原因:旧版本函数重载 void fun(int)和 void fun(int *);fun(NULL)调用void fun(int)而不是void fun(int *),与直观定义相悖。
新版本下fun(nullptr)调用void fun(int *);fun(0)调用void fun(int);
另外,nullptr 的类型为 nullptr_t,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。
即:
int Num = 10; int * pNum = &Num; if(nullptr == pNum)
2.类型推导(auto和decltype)
2.1 auto关键字, 根据上下文自动推测变量类型;
auto index = 10; // index类型为int
auto strName = "kkk"; //strName为const char *
auto add(int a, int b)//auto 推导函数的返回类型
{
return a + b;
}
C++14开始,auto可以用来推导函数的函数的返回类型
注意:
auto不可以用于函数传参,这种情况应该使用重载或函数模板
2.2 decltype自动推测表达式的类型,但是和sizeof一样,不计算表达式的值;弥补auto不能推导表达式的类型缺点
auto iNum = 10;
auto iNum2 = 230;
decltype(iNum + iNum2) unknowType = iNum2 + iNum; //unknowType 为int类型
decltype(iNum++) unknowType1 = iNum2 + iNum; // unknowType1为int类型,后置++返回的是int类型
decltype(++iNum) unknowType2 = iNum; // unknowType2为int&类型,引用类型,前置++返回的是引用类型
decltype推导表达式的类型设计函数的话,类型和函数的返回值类型一致
3.区间迭代
4.统一的初始化列表
5.右值引用
右值引用声明的时候必须初始化,并且只能用右值初始化;
eg: int num = 10;
int && a = num;//error
int && b = 10;
使用右值初始化对象的时候,直接交换了右值的临时对象和需要初始化的对象内存。---->右值对象不会再使用,只是把资源从一个对象转移到另一个对象。
参考链接:https://blog.csdn.net/jiange_zh/article/details/79356417
网友评论