int a = 10;
do {
a--;
} while (a--);
關鍵在於 `while(a--)` 的求值順序:
a--,a 變 9。a--,a 變 7。| 輪次 | 循環體 a-- 後 | while 判斷值 | while 遞減後 |
|---|---|---|---|
| 1 | 9 | 9 (真) | 8 |
| 2 | 7 | 7 (真) | 6 |
| ... | ... | ... | ... |
| 10 | -1 | -1 (真) | -2 |
| ∞ | 負無窮 | 永真 | 負無窮 |
// 方案 1:預先遞減
int a = 10;
do {
a--;
} while (--a); // 先遞減再判斷,a 變 0 時退出
// 方案 2:分離判斷與修改
int a = 10;
while (a > 0) {
a--;
}
後置 `++/--`:先用後改。前置 `++/--`:先改後用。
在條件判斷中,永優先使用前置形式或顯式比較,避免副作用導致邏輯難以預測。