#include<iostream>
using namespace std;
int main()
{
int i=2;
cout<<++i<<" "<<++i;
return 0;
}
プログラムの出力が「34」ではなく「44」であるのはなぜですか?
#include<iostream>
using namespace std;
int main()
{
int i=2;
cout<<++i<<" "<<++i;
return 0;
}
プログラムの出力が「34」ではなく「44」であるのはなぜですか?
同じ変数 (2 つのインクリメント) に 2 つの副作用があり、それらの間にシーケンス ポイントはありません。したがって、それらは任意の順序で発生するか、インターリーブされる可能性さえあります-動作は未定義です. ここでインターリーブされた動作を取得しているようです-式++i
はインクリメントです I then read i. したがって、インクリメント、インクリメント、読み取り、読み取りを取得しています。
行が出力される前に両方のインクリメントが発生するためです。画面への実際の書き込みは、行全体が実行されるまで延期されますが、それまでに i の参照はすでに値が更新されています。
cout ラインを 2 つの個別の出力に分割すると、期待どおりに評価されます。