i 與 i作為左值

2021-06-27 01:26:59 字數 723 閱讀 6764

#include

using namespace std;

int main()

/*i++ 不可以作為左值;

++i 可以作為左值。

c++primer 中關於左值右值的說法:

變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的(addressable)對於每乙個變數都有兩個值與其相聯:

1).它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值(rvalue,讀做are-value).我們也可認為右值的意思是被讀取的值(read   value)。   文字常量和變數都可  被用作右值。  

2).它的位址值——即儲存資料值的那塊記憶體的位址。它有時被稱為變數的左值(lvalue,讀作ell-value)。我們也可認為左值的意思是位置值location   value文字常量不能被用作左值

i++的實現**:

int temp;

temp   =   i;

i      =   i+1;

return temp

++i的實現**:

i = i+1;

return i;

i++ = 10;錯誤是因為i++返回的是編譯器自動分配的臨時變數,而這個臨時變數temp並不是你程式中定義的可定址變數的引用,也就是不能作為左值。

++i = 10;因為其返回值就是i;

上面也可以看出 ++i 的效率比 i++高

*/

i 為什麼不能作為左值,而 i可以作為左值

今天看書見到如下 int a 2 a 根據操作符的優先順序和結合性知,操作符 的優先順序為3,結合性為右結合,即 a 可以理解為 a 但我把 放在vs2015上,結果報錯,如圖 意思就是所a 不能作為左值,那a 為什麼不能作為左值呢?我們先來看左值的定義 左值 lvalue 是b語言 c語言 c 語...

i 為什麼不能作為左值?

1 首先說左值和右值的定義 變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的 addressable 對於每乙個變數都有兩個值與其相聯 1 它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值 rvalue,讀做are value 我們也可認為右值的意思是被讀取的值 r...

關於i 和 i以及左值,右值

今天無意之間看到了帖子上有人說 i 5 不合法 i 5 合法首先對於i 的實現是 int temp temp i i i 1 return temp 而 i的實現是 i i 1 return i 所以對於我們提出來的問題已經能得到解決了 再囉嗦幾句關於i 和 i的效率問題 按上面分析來說,i的效率是...