1.首先認識左值和右值的定義:
左值:表示式可以引用到乙個物件,並且這個物件是一塊記憶體空間並可以檢測和儲存,這個表示即是左值。
右值最大限度只能被乙個常量引用:
const int &a = 1;
規則:臨時變數是右值,且可以改變:
t().set().get()
t為臨時變數,set()設定新值,get()獲取更改後的值。
2.首先寫乙個mystring類:
#includeclass mystringpublic:
mystring()
mystring(const char* str)
mystring(const mystring& rhs)
mystring& operator=(mystring& rhs)
return *this;
} virtual ~mystring() };
int main()
左值和右值引用符號區別:
void print_value(int& a)void print_value(int&& a)
右值引用實際是用來支援轉移賦值和轉移構造:
mystring(mystring&& rhs) //不包含constmystring& operator(mystring&& rhs) //不包含 const
return *this;
}
轉移構造和賦值的好處是:節省了資源,提高了程式效率。
std::move是標準庫提供的將乙個命名物件轉換為乙個臨時物件(右值)來支援轉移構造和賦值:
template void swap(t& a, t& b)
template void swap(t (&a)[n], t(&b)[n])
{ for(size_t i = 0; i這樣提高了swap效率。
文章出自:
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 的基礎。而要理解右值引用,就必須先區分左值與右值。對左值和右值的乙個最常見的誤解是 等號左邊的就是左值,等號右邊的就是右值。左值和右值都是針對表示式而言的,左值是指表示式結束後依然存在的持久物...