C++ 11之 && 右值引用
阿新 • • 發佈:2019-01-05
最近在看cocos2dx的原始碼,發現了一個模板類有一個奇怪的語法&&:
inline RefPtr(RefPtr<T> && other)
{
_ptr = other._ptr;
other._ptr = nullptr;
}
剛開始一陣犯暈,一個型別Ref<T>和一個似乎是形參的other與操作會得出一個什麼?顯然這種理解是錯誤的。。 “&&”還有一種含義是右值引用,表示形參是一個右值。 **左值 右值:** int a = 0; a是一個左值,左值是一個變數,可以被引用和多次使用。0是一個右值,不可以被引用。 左值一般是非臨時變數,可以多次使用。右值只在當前表示式有效。 看一下右值引用的用法:
class MyClassB
{
public:
void init(int & intval)
{ cout<<"use & print"<<endl;};
void init(int &&intval)
{ cout<<"use && print"<<endl;}
};
int main(void)
{
int ae = 10;
MyClassB().init(10);
MyClassB().init(ae);
return 0;
}
可以看出,傳入不同型別的值,編譯器自動識別呼叫了不同的函式。
右值引用是用來支援轉移語義的。轉移語義可以將資源 ( 堆,系統物件等 ) 從一個物件轉移到另一個物件,這樣能夠減少不必要的臨時物件的建立、拷貝以及銷燬,能夠大幅度提高 C++ 應用程式的效能。臨時物件的維護 ( 建立和銷燬 ) 對效能有嚴重影響。