左值:可以取位址、有名字的
右值:不能取位址、沒名字的
傳統的c++引用稱為左值引用,使得標誌符關聯到左值。
c++11新增了右值引用,使用&&表示。
引入右值引用的主要目的之一是實現移動語義。
在複製物件時,實現物件的移動而非拷貝。
通過移動建構函式、移動賦值運算子實現:函式的引數為右值引用,函式內部並非深度複製,而是奪取所有權。在將所有權轉移給新物件的過程中,移動建構函式可能修改其實參,這意味著右值引用引數不應是const。
對乙個類:
class useless
;
複製建構函式:
useless:
:useless
(const useless & f):n
(f.n)
移動建構函式:
useless:
:useless
(useless && f):n
(f.n)
它讓pc指向現有的資料,以獲取這些資料的所有權。此時,pc和f.pc指向相同的資料,呼叫析構函式時將帶來麻煩,因為程式不能對同乙個位址呼叫delete兩次。為避免這個問題,改建構函式隨後將原來的指標設定為空指標。由於修改了f物件,這要求不能在引數宣告中使用const。 C 11 右值引用和移動語義
因為工作室要求寫技術部落格記錄學習到的知識點,自己之前是沒有寫過部落格的,所以現在用一篇介紹右值引用和移動語義的部落格作為部落格的第一篇,可能對於移動語義的理解還不夠深刻,但可以作為乙個簡單的介紹部落格 要理解好右值引用首先要知道什麼是左值?什麼是右值?1.左值是表示式結束後依然存在的持久化物件 2...
C 11新特性 移動語義和右值引用
傳統的c 引用 左值引用 使得識別符號關聯到左值。左值是乙個表示資料的表示式 如變數名或解除引用的指標 程式可以獲得其位址。c 11新增了右值引用。右值引用,顧名思義,可以關聯到右值,即 可以出現在賦值表示式的右邊,但不能對其應用位址運算子的值。右值包括字面常量 c風格字串除外,它表示位址 諸如x ...
C 11 右值引用與move語義
1.右值引用 1.1 右值 右值就是指在下乙個分號後 更準確的說是在包含右值的完整表示式的最後 銷毀的臨時物件。對於c 11,編譯器會依據引數是左值還是右值在複製建構函式和move建構函式間進行選擇。怎樣區分呢?the distinguishing criterion is if it has a ...