右值引用&&

動機

對象之間的拷貝太費時,即將銷燬的對象不必拷貝,僅僅移動就行。

右值引用

回憶左值是要用表達式的地址,右值是要表達式的值。

左值引用是&,右值引用是&&。左值不能指右值,右值不能指左值。

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)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章