我知道C中的計算順序並不嚴格,因此表達式--a + ++a
的值未定義,因爲不知道聲明的哪部分首先運行。在同一語句中使用幾個遞增/遞減
但是,如果我知道計算順序在特定情況下無關緊要怎麼辦?例如:
- 所有修改對應於不同的變量(如在
a[p1++] = b[p2++]
) - 訂單並不重要,像
a++ + ++a
- 結果是兩個無論哪個的+
側首先計算。是否可以保證在運行另一個零件之前完全計算一個零件?即編譯器無法記憶a++
的結果,++a
的結果,然後申請第一個a++
,得到一個而不是兩個?例如,緩存初始值a
並將其作爲參數獨立傳遞給兩個運算符。
我對C,C99,C11,C++ 03和C++ 11的答案感興趣,如果它們之間有任何區別的話。