C 11右值引用

2021-08-15 05:28:13 字數 616 閱讀 7630

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 的基礎。而要理解右值引用,就必須先區分左值與右值。對左值和右值的乙個最常見的誤解是 等號左邊的就是左值,等號右邊的就是右值。左值和右值都是針對表示式而言的,左值是指表示式結束後依然存在的持久物...