C++ 前置インクリメントと後置インクリメント
前置と後置の違い
見た目は似ているが、使い方を誤ると、
発見しにくいバグを生み出してしまうため注意が必要。
前置、後置の動作確認プログラム
int main() { int a=0; int b=0; // 前置インクリメント b=++a; cout << "前置 a:" << a << endl; cout << "前置 b:" << b << endl; // 後置インクリメント b=a++; cout << "後置 a:" << a << endl; cout << "後置 b:" << b << endl; return 0; }
実行結果
前置 a:1 前置 b:1 後置 a:2 後置 b:1
実行結果を見ると、前置と後置で結果が異なっている。
結果を見る限りでは、変数を単にインクリメントする分には、
前置、後置どちらでも構わないが、
インクリメント結果を代入する場合には注意が必要そうだ。
なぜ結果が異なるのか?
かの有名な!?「プログラミング言語C++」にはこう書かれている。
前置インクリメントについては、
y=++x は y=(x=x+1) と等価である。
要するに、+1した結果を代入している。
それに対し、後置インクリメントについては、
y=x++ は y=(t=x,x=x+1,t) と等価だ。
要するに、インクリメントする前の情報を代入している。
C++開発者が言っていることなので間違いはないだろう。