在c++11以後,表示式按值類別,可分為3種: 另,
泛左值(generalized lvalue,glvalue) = 左值 + 將亡值
右值(right value,rvalue) = 純右值 + 將亡值
以下詳細講解:
這裡解釋一下「具名的右值引用是左值」。看下面的**:
void foo(x&& a)
這裡 a 是乙個具名的右值引用,在 「x b=a;」 這一句,因為a是左值,所以呼叫的是x的拷貝建構函式而不是移動建構函式,因此此句之後對a進行訪問是沒有問題的。而這就是「具名的右值引用是左值」的意義所在。
純右值:純粹的字面值(如10,true),或者是 求值結果相當於字面值(除字串)或不具名的臨時物件。
在c++11之前的右值和c++11中的純右值是等價的。c++11中的將亡值是隨著右值引用(即像int && a 這樣的)而引入的。
所謂的「將亡」,當乙個右值準備完成初始化或賦值任務時,它就將亡了。
將亡值表示式,就是:
以下是將亡值:
(完)
C 11之左值 純右值和將亡值
在c 11中所有的值一定屬於左值 純右值和將亡值三種值之一,分別介紹一下這三種型別。在c 中定義左值與右值的比較標準的方法是根據其可以取位址來判斷。左值就是可以對變數進行取位址或者有名字的變數,按照c語言中的規定也就是說其在記憶體中是被分配了位置 而右值就是不可以取位址 沒有名字的。比如 a b c...
C grammar 左值 右值和將亡值
在c 03中就有相關的概念 通俗的理解 1 能放在等號左邊的是lvalue 2 只能放在等號右邊的是rvalue 3 lvalue可以作為rvalue使用 對於第三點可以舉個例子 int x x 6 x是左值,6是右值 int y y 6 y是左值,6是右值 y x x作為右值,所以左值是可以作為右...
C 11 左值 右值 右值引用詳解
在c 11中所有的值必屬於左值 右值兩者之一,右值又可以細分為純右值 將亡值。在c 11中可以取位址的 有名字的就是左值,反之,不能取位址的 沒有名字的就是右值 將亡值或純右值 舉個例子,int a b c,a 就是左值,其有變數名為a,通過 a可以獲取該變數的位址 表示式b c 函式int fun...