動機
對象之間的拷貝太費時,即將銷燬的對象不必拷貝,僅僅移動就行。
右值引用
回憶左值是要用表達式的地址,右值是要表達式的值。
左值引用是&,右值引用是&&。左值不能指右值,右值不能指左值。
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)