i在C C 中是不是左值

2021-08-26 04:02:17 字數 861 閱讀 4607

前些天寫blog左值與右值(c++學習)時,已經確認在c++中,++i 是左值。可是,今天在newsmth的c語言版上看到乙個相關的問題。發現在c語言中,++i不是左值。

乙個很簡單的例子:

int main()

儲存成 hello.c ,分別用 gcc、clang、cl、cc編譯

hello.c: in function 『main』:

hello.c:4:5: error: lvalue required as left operand of assignment

hello.c:4:9: error: expression is not assignable

++a = 5;

~~~ ^

1 error generated.

用於 80x86 的 microsoft (r) 32 位 c/c++ 優化編譯器 16.00.30319.01 版

hello.c

hello.c(4) : error c2106: 「=」: 左運算元必須為左值

"hello.c", line 4: left operand must be modifiable lvalue: op "="

cc: acomp failed for hello.c

如果將檔案儲存為 hello.cpp,分別用 g++、clang、cl、cc編譯。卻則沒有任何錯誤。

++i 在c++中是左值,對此 c++標準(5.3.2)中有明文規定

這個,翻了下c99和c1x,沒發現明確的條文。

或者我錯過了什麼重要的東西?抑或犯了很低階的錯誤? ......

i 是不是原子操作

可能我們對i 或者 i的用法已經爛熟於心,但是有次去浦發面試,面試官問,i 是不是原子操作,當是問懵了,回來惡補一下 問這個問題,面試官是想考察你對記憶體的理解。首先,之所以要討論是不是原子操作,因為如果是原子操作的話,在多執行緒操作時,就不用為了保護這個操作而加上昂貴又耗費效能的鎖。在單核作業系統...

a 與 a 是不是左值?為什麼?

來自csdn的討論帖 貼上某人的總結 1.什麼是左值 int a 2 這句話裡面2是乙個 值 a是乙個變數,它有乙個4位元組的記憶體區域,這個記憶體區域裡面裝著2,這就暗示這個記憶體區域可以被改寫,可以被賦值,可以出現在 號的左邊 a是乙個 左值 而2就僅僅是乙個2,它是乙個值,我看看到它,就認為它...

在C C 中左值和右值得理解

宣告 本文 如果有侵犯他人版權,煩請告知,會立馬刪除。左值就是在賦值中可以放在賦值操作符兩邊的值,比如 int a 1 double b 2.0 a b b a 這裡a和b都是左值,一切變數都是左值,但const變數是例外。p是乙個左值,和變數一樣,只要在 p的右邊加上賦值運算子,就可改變 p的值。...