右值和forward
看实例 http://www.wjhsh.net/KillerAery-p-12802771.html
主要处理深拷贝问题。。
一、右值
1、 int&& b = 6; //这个时候只能右值引用 2、 templatevoid printValue( T&& t) { cout << "r-value: " << t << endl; //t = 0; 会出错 } 函数里面的T&& ,即可也接收左值也可以接收右值,除非被重写,就是再定义一个T&的 3 template void printValue(const T&& t) //这个时候只能接收右值 ,连const的左值也不行;与容器的const类似 { cout << "r-value: " << t << endl; t = 0; }
二、完美转发
就是再传参时,还能是右值
forward的由来:保持住参数的右值属性。
模板函数中的推导类型,作为另一函数的参数时,不管实参是什么类型,作为另一个参数的实参时,都变成了左值。
因为C++里规定函数的形参就是左值,不管调用侧的实参是否是右值。
https://www.cnblogs.com/xiaoshiwang/p/9589008.html