首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C/C++ 運算符優先級陷阱:x += x -= x - x-- 逐步求值

     編輯:程式設計綜合問答

表達式

int x = 4;
x += x -= x - x--;

編譯器生成的彙編還原執行順序

; x -= x - x--  部分
mov eax, [x]       ; eax = 4
sub eax, [x]       ; eax = 4 - 4 = 0
mov ecx, [x]       ; ecx = 4
sub ecx, eax       ; ecx = 4 - 0 = 4
mov [x], ecx       ; x = 4
; x += x  部分
mov edx, [x]       ; edx = 4
add edx, [x]       ; edx = 4 + 4 = 8
mov [x], edx       ; x = 8
; x-- 後綴自減
mov eax, [x]       ; eax = 8
sub eax, 1         ; eax = 7
mov [x], eax       ; x = 7

最終結果

x = 7

核心規則

  1. 後綴 -- 優先級最高,但副作用延遲到序列點(語句結束)才生效;
  2. 複合賦值右結合:x += (x -= (x - x--));
  3. x-- 在減法中使用舊值 4,減法結果 0,x -= 0 仍為 4,x += 4 變 8,最後執行 x-- 變 7。

最佳實踐

生產代碼嚴禁編寫此類表達式,拆分為多條語句,保證可讀性與可維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved