C++11 笔记

发布时间 2023-03-29 11:10:42作者: 关山qy

1、 可以利用C++11 friend 友元新特性 创建可靠的测试版本。

 

2、移动语义  移动构造函数  ----   https://blog.csdn.net/u011852872/article/details/127076918

 

当类中同时包含拷贝构造函数和移动构造函数时,如果使用临时对象初始化当前类的对象,编译器会优先调用移动构造函数来完成此操作。只有当类中没有合适的移动构造函数时,编译器才会退而求其次,调用拷贝构造函数。
实际开发中,通常在类中自定义移动构造函数的同时,会再为其自定义一个适当的拷贝构造函数。当用户利用右值初始化类对象时,会调用移动构造函数;使用左值(非右值)初始化类对象时,会调用拷贝构造函数

使用左值,调用移动构造函数初始化对象
默认情况下,左值初始化同类对象只能通过拷贝构造函数完成,如果想调用移动构造函数,则必须使用右值进行初始化

C++11 标准中为了满足用户使用左值初始化同类对象时也通过移动构造函数完成的需求,新引入了 std::move() 函数,它可以将左值强制转换成对应的右值,由此便可以使用移动构造函数

 

 

左值、纯右值、将亡值

 

3、初始化列表    - 3.5.2  P96

   ---可以防止类型收窄 

 

4、 auto 推导

   

     auto 不能推导的情况:

  1、 对于函数fun来说,auto不能是其形参类型。可能读者感觉对于fun来说,由于其有默认参数,所以应该推导fumn形参x的类型为int型。但事实却无法符合大家的想象。因为auto是不能做形参的类型的。如果程序员需要泛型的参数,还是需要求助于模板。

 2、 对于结构体来说,非静态成员变量的类型不能是auto的。同样的,由于var定义了初始值,读者可能认为auto0可以推导st 成员 var 的类型为int的。但编译器阻止:auto对结构体中的非静态成员进行推导,即使成员拥有初始值。

 3、声明auto数组。我们可以看到,main中的x是一个数组,y的类型是可以推导的而声明 autoz[3]这样的数组且同样会被编译器禁止。

 4、在实例化模板的时候使用auto作为模板参数,如main 中我们声明的vector<cauto> V。

 

5、 decltype 

 

 6、基于范围的for 循环

 

 

7、强类型枚举

 

 

 

8、原子类型和原子操作    并行编程、多线程C++11

  

 

   内存模型 顺序一致性 与memory_order 相关概念:

 

 

 

 

 

 

9、默认函数的控制

   

 

 

10、 lambda