C 11 右值引用和轉移賦值

2022-09-12 16:03:37 字數 1034 閱讀 4687

1.首先認識左值和右值的定義:

左值:表示式可以引用到乙個物件,並且這個物件是一塊記憶體空間並可以檢測和儲存,這個表示即是左值。

右值最大限度只能被乙個常量引用:

const int &a = 1;

規則:臨時變數是右值,且可以改變:

t().set().get()

t為臨時變數,set()設定新值,get()獲取更改後的值。

2.首先寫乙個mystring類:

#includeclass mystring

public:

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)        //不包含const

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