美文网首页
C++11新特新学习

C++11新特新学习

作者: AD_wang | 来源:发表于2021-10-09 17:31 被阅读0次

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

相关文章

网友评论

      本文标题:C++11新特新学习

      本文链接:https://www.haomeiwen.com/subject/veeqoltx.html