如果稱 &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 我們先理解一下這些名詞的字面含義 值...