最近在看cocos2dx的源**,發現了乙個模板類有乙個奇怪的語法&&:
inline refptr(refptr&& other)
剛開始一陣犯暈,乙個型別ref和乙個似乎是形參的other與操作會得出乙個什麼?顯然這種理解是錯誤的。。
「&&」還有一種含義是右值引用,表示形參是乙個右值。
**左值 右值:**
int a = 0;
a是乙個左值,左值是乙個變數,可以被引用和多次使用。0是乙個右值,不可以被引用。
左值一般是非臨時變數,可以多次使用。右值只在當前表示式有效。
看一下右值引用的用法:
可以看出,傳入不同型別的值,編譯器自動識別呼叫了不同的函式。
右值引用是用來支援轉移語義的。轉移語義可以將資源 ( 堆,系統物件等 ) 從乙個物件轉移到另乙個物件,這樣能夠減少不必要的臨時物件的建立、拷貝以及銷毀,能夠大幅度提高 c++ 應用程式的效能。臨時物件的維護 ( 建立和銷毀 ) 對效能有嚴重影響。
C 11 理解 三 之 右值引用
c 11 增加乙個新的非常數引用 reference 型別,稱作右值引用 r value reference 標記為t 右值引用所引用的臨時物件可以在該臨時物件被初始化之後做修改,這是為了允許 move 語義。c 03 效能上被長期被詬病的其中之一,就是其耗時且不必要的深度拷貝。深度拷貝會發生在當物...
c 11新特性之右值引用
c 11 增加了乙個新的型別,稱為右值引用 r value reference 標記為 t 在介紹右值引用型別之前先要了解什麼是左值和右值。左值是指表示式結束後依然存在的持久物件,右值是指表示式結束時就不再存在的臨時物件。乙個區分左值與右值的便捷方法是 看能不能對表示式取位址,如果能,則為左值,否則...
C 11新特性之右值引用
右值 只能出現在operator 右邊的 通常臨時物件 將亡值 字面值常量 純右值 是右值 類的臨時物件是乙個右值,臨時變數一定被當成右值,因為臨時物件建立之後不會再被使用,所以直接把右值資料引用給別的變數,有時候乙個左值在後面不會被用到,那麼就可以使用move語義把左值轉成右值。右值引用和左值引用...