前些天寫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的值。...