动机
对象之间的拷贝太费时,即将销毁的对象不必拷贝,仅仅移动就行。
右值引用
回忆左值是要用表达式的地址,右值是要表达式的值。
左值引用是&,右值引用是&&。左值不能指右值,右值不能指左值。
int i = 42;
int &r = i;
int &&rr = i; //xxx,右值不能指左值。
int &r2 = i*2; //xxx,左值不能指右值
const int& r3 = i*2; //正确,当临时对象绑定
int && r4 = i*2;
左值和右值的生命期
看下临时对象是右值,就知道左值比右值活得长啊。
所以右值引用绑定到临时对象。变量是左值,绑定不了。
std::move函数
可以把左值通过这个函数转成右值,用右值引用绑定
int &&rr3 = std::move(rr1);
移动完就不要用rr1了,指不要用它的值,因为不知道什么时候它就没了。(primer 544)