c++的右值引用如下:
int && key = 10;
其中,key就是乙個右值引用。該語句的作用是將10關聯到了右值引用key。
該語句會導致10儲存在乙個特定的記憶體位址,並且可以根據key來獲取該位址。
右值引用是為了解決移動語義,也就是以下問題:
vectorvintsa;
對vintsa新增了1000個資料;
vectorvintsb(vintsa);
在vintsb的構造過程中,會首先new1000個int出來,然後將vintsa的1000個資料複製過來。一般情況下,這樣是容易理解的。
但若將**改為:
vectorvintsb(allcaps(vintsa));
allcaps()會建立乙個temp物件,其中有1000個int資料;然後vintsb的建構函式會new1000個int出來,將temp物件複製給vintsb,然後刪除temp物件。
考慮到temp僅僅是個臨時物件,因此這裡做了大量的無用功。
所以,若可以將temp建立的資料直接轉讓給vintsb,則會省去大量的時間。即,直接將temp的資料與vintsb關聯,然後刪除temp與資料的鏈結。而在整個過程中,資料始終處於原來的位置。類似指標。
c 11 右值引用
右值引用 是一種復合型別,跟c 的傳統引用很類似。為更準確地區分兩種型別,我們把傳統的c 引用稱為 左值引用 而使用 引用 這一術語時,我們的意思同時包含兩種引用 左值引用和右值引用。右值引用的行為跟左值引用類似,不同之處在於 右值引用可以繫結到臨時量 右值 而 非const的 左值引用卻不能繫結到...
C 11 右值引用
消除兩個物件互動時不必要的物件拷貝,節省運算儲存資源,提高效率。能夠更簡潔明確地定義泛型函式。1.右值引用 int a a 1 here,a is an lvalue 上述的a就是乙個左值。c 11中左值的宣告符號為 為了和左值區分,右值的宣告符號為 printreference const str...
C 11右值引用
c 11中引入的乙個非常重要的概念就是右值引用。理解右值引用是學習 移動語義 move semantics 的基礎。而要理解右值引用,就必須先區分左值與右值。對左值和右值的乙個最常見的誤解是 等號左邊的就是左值,等號右邊的就是右值。左值和右值都是針對表示式而言的,左值是指表示式結束後依然存在的持久物...