++i(前置遞增)與 i++(後置遞增)在獨立陳述式中效果相同,但在參與運算式賦值時行為不同,也是面試常考題。
先遞增,再取值參與運算。
int i = 2; int a = ++i; // 步驟:i=3 → a=3 // 結果:a=3, i=3 // 等價於:i = i + 1; a = i;
先取值參與運算,再遞增。
int i = 2; int a = i++; // 步驟:a=2 → i=3 // 結果:a=2, i=3 // 等價於:a = i; i = i + 1;
++i; // 等價於 i = i + 1 i++; // 等價於 i = i + 1 // 此時兩者無差異,但編譯器可能產生不同指令(前置通常較少暫存器)
++i(C++ 迭代器更明顯),避免建立暫時物件i++| 運算式 | 初始 i | 運算式值 | 最終 i |
|---|---|---|---|
| a = ++i | 2 | 3 | 3 |
| a = i++ | 2 | 2 | 3 |
| ++i | 2 | 3 | 3 |
| i++ | 2 | 2 | 3 |
掌握此差異能寫出更精確、效能更佳的迴圈與運算邏輯。