右值以及移動函式

2021-08-04 23:49:33 字數 711 閱讀 8613

如果稱 &i = a; i是左值運算; 那&&i = a為右值運算;

**當然為右值運算右邊的值應該為乙個常數; **

正是新定義的右值運算, 也就有了移動函式;

#include #include #include #include #include //移動拷貝;

//移後源物件必須可析構;

class t1

//noexcept : 保證程式的移動函式是絕對正確 沒有異常的;

t1(t1 &&t1) noexcept : x(t1.x), str(t1.str) {}

//引用限定符;

t1 & operator = (const t1 &) &; //只能向可修改的左值賦值

//t1 fun() & const; 只能將 & 放在const之後;

t1 fun() const &; //可用於任何型別的t1;

t1 fun1() && ; //只能用於可改變的右值;

private:

int x;

std::string str;

};//t1::t1(t1 &&t1) noexcept

//int main()

當然, 自己看右值的時候已經很矇了, 還是等很久再來重溫它應該會理解更深刻;

右值引用與移動建構函式 移動賦值

有一陣子沒看c 了,翻開c primer又陌生了一些,想了想引用,於是乎來看了下右值引用。int a 5 int b a 這是左值引用,若我們這樣修改 int a 5 int b a 1 編譯器會報錯 非常量引用的初始值必須為左值。也就是右邊的a 1是常量,常量給非常量引用賦值就報錯。我們可以這樣修...

右值引用 移動建構函式和move

左值和右值判斷 1 可位於賦值號 左側的表示式就是左值 反之,只能位於賦值號右側的表示式就是右值。2 有名稱的 可以獲取到儲存位址的表示式即為左值 反之則是右值。例如 int i 10 10 i 錯誤,10為右值,不能當左值用 int j 20 j i i和j都是左值,但是i可以當右值用 以上面定義...

C 右值和移動

自c 11以來,c 進入modern c 時代。移動語義是c 11裡引入的乙個重要概念 理解這個概念,是理解很多現代c 裡的優化的基準 我們常常會說,c 裡有左值和右值。這話不完全對。標準裡的定義實際更複雜,規定了下面這些值類別 value categories 我們先理解一下這些名詞的字面含義 值...