目录
- 右值引用
- 移动语义
- 拷贝构造与移动构造
- 万能引用与完美转发
右值引用
左值:可以出现在赋值符号的左边和右边,左值可以取地址。
右值:右值可以出现在赋值符号右边,不能出现在左边,右值不能取地址。
左值/右值引用就是给左值/右值起别名。
int x = 1, y = 2;int& r1 = x;//左值引用const int& r2 = x + y;//const左值引用可引用右值int&& rr1 = 10;//右值引用int&& rr2 = x + y;int&& rr3 = move(x);//右值引用可引用move后的左值
移动语义
移动语义可以直接获取将亡资源,减少拷贝
拷贝构造与移动构造
(实际上在 func 返回时,发生了两次拷贝,这个过程编译器在这里做了优化)
移动构造
万能引用与完美转发
完美转发能够保持原来的值属性不变
对于一个Object类,有以下方法定义,若不使用完美转发,对象经过多层调用传递后值属性不能够保持
使用万能引用, universal reference
使用完美转发,可保持原属性