亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C,C ++,Java和C#中的前后增量運算符行為

C,C ++,Java和C#中的前后增量運算符行為

慕容708150 2019-07-26 16:52:38
C,C ++,Java和C#中的前后增量運算符行為在發布和預增量運算符方面,C / C ++,C#和Java之間究竟有什么區別?這就是我用VC ++ 10,Java 1.6和C#4獲得的int a = 2;int b = a++ + a++;int c = ++a + a++ + a++;      +-----+------+------+----+      |  C  | C++  | Java | C# |+-----+-----+------+------+----+| a   |  7  |  7   |   7  |  7 |+-----+-----+------+------+----+| b   |  4  |  4   |   5  | 5  |+-----+-----+------+------+----+| c   | 15  |  15  |  16  | 16 |+-----+-----+------+------+----+
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

我沒有時間寫出C ++,C,C#和Java之間差異的詳細描述。我只會說前置和后置增量運算符的C#行為是完全指定的(在單線程場景中;如果你想知道它的原子性,保證在多處理器弱內存模型中觀察讀寫順序和所以,你可以自己做這項研究。)它沒有在C和C ++中完全指定; 編譯器具有廣泛的優勢,可以通過重新排序副作用來做任何事情。我從來沒有使用過Java,所以我不會猜測Java的作用。

有關C#的更多信息,您應該閱讀C#規范。簡而言之,請閱讀我對這個問題的回答:

i ++和++ i有什么區別?

為了更短的時間:

C#表達式中的Subexpressions按優先級和關聯性進行邏輯分組,然后從左到右進行評估,無論如何。(例如,A()+ B()* C()計算A(),然后計算B(),然后計算C()。乘法“在之前”加法的事實是無關緊要的;子表達式總是被評估左到右。)

如果子表達式的評估由于前或后增量子表達而導致副作用,那么副作用會結果產生之前立即發生。


查看完整回答
反對 回復 2019-07-26
?
慕田峪9158850

TA貢獻1794條經驗 獲得超8個贊

在C ++中至少有這種未定義的行為。引用C ++標準:

在前一個和下一個序列點之間,標量對象應通過表達式的計算最多修改其存儲值一次。


查看完整回答
反對 回復 2019-07-26
  • 3 回答
  • 0 關注
  • 561 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號