| 特性 | 前置遞增 ++x | 後置遞增 x++ |
|---|---|---|
| 操作順序 | 先遞增,後使用新值 | 先使用舊值,後遞增 |
| 返回值 | 左值(遞增後的對象引用) | 右值(遞增前的副本) |
| 典型效率 | 無臨時對象開銷 | 需構建臨時副本(類類型) |
#include <stdio.h>
int main() {
int x = 10, y = 10;
int a = x++; // a = 10, x 變 11
int b = ++y; // y 變 11, b = 11
printf("a = %d, x = %d\n", a, x); // a=10, x=11
printf("b = %d, y = %d\n", b, y); // b=11, y=11
return 0;
}
// 前置:返回 *this 引用
T& operator++() { /* increment */ return *this; }
// 後置:int 佔位參數區分簽名,返回舊值副本
T operator++(int) { T old = *this; ++(*this); return old; }
后置版本涉及拷貝構造,對複雜對象有額外開銷。原則:不需要舊值時優先用前置遞增(如循環迭代器 ++it)。i = i++ + ++i; 在 C/C++ 中行為未定義,嚴禁編寫依賴求值順序的表達式。i++。理解這一細節,不僅能避免邏輯 Bug,更是 C++ 性能優化與代碼風格的基礎素養。