int count = 0;
printf("%d %d %d\n", count++, count++, count++); // 輸出 2 1 0?0 1 2?亂碼?全看編譯器心情
count = count++; // 结果 0?1?未定義
C/C++ 標準**不規定**函數參數求值順序(C++17 起規定左至右,但副作用完成時機仍未序),且**同一序列點內對同一標量物件多次修改**屬於 UB。
count++ 先求值得 0,count 變 1;中間得 1,變 2;左邊得 2,變 3。**但這只是特定編譯器的實作細節,不可依賴!**
++count:先增後用,值為增後結果。count++:先用後增,值為增前結果。單一表達式中,同一變數最多修改一次;讀取與修改不可無序混用。
需拆分為多條語句:
int a = count++;
int b = count++;
int c = count++;
printf("%d %d %d\n", a, b, c);