C++ 前置インクリメントと後置インクリメント

インクリメント、デクリメントとは?

インクリメント(++演算子)は、val+=1 と等価。
デクリメント(--演算子)は、val-=1 と等価。
いずれも前置と後置が可能。

前置と後置の違い

見た目は似ているが、使い方を誤ると、
発見しにくいバグを生み出してしまうため注意が必要。

前置、後置の動作確認プログラム

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++開発者が言っていることなので間違いはないだろう。