1
#include<iostream>
using namespace std;
int main()
{
    int i=2;
    cout<<++i<<" "<<++i;
    return 0;
}

プログラムの出力が「34」ではなく「44」であるのはなぜですか?

4

2 に答える 2

0

同じ変数 (2 つのインクリメント) に 2 つの副作用があり、それらの間にシーケンス ポイントはありません。したがって、それらは任意の順序で発生するか、インターリーブされる可能性さえあります-動作は未定義です. ここでインターリーブされた動作を取得しているようです-式++iはインクリメントです I then read i. したがって、インクリメント、インクリメント、読み取り、読み取りを取得しています。

于 2012-11-09T17:26:37.570 に答える
0

行が出力される前に両方のインクリメントが発生するためです。画面への実際の書き込みは、行全体が実行されるまで延期されますが、それまでに i の参照はすでに値が更新されています。

cout ラインを 2 つの個別の出力に分割すると、期待どおりに評価されます。

于 2012-11-09T17:07:57.547 に答える