重複の可能性:
未定義の動作とシーケンス ポイント
次のステートメントの動作を説明してください
int b=3;
cout<<b++*++b<<endl;
どのように計算されますか?
ここでの動作は未定義です。この質問を参照してください
関連する標準見積もり:
§5/4.1 Between the previous and next sequence point a scalar object shall have its stored value modified at most once by the evaluation of an expression.
最も一般的なシーケンス ポイントはステートメントの終わりです。
また、標準から注目に値する:
§5.2.2/8 The order of evaluation of arguments is unspecified.
他の人が言ったように、動作は未定義になります。出力は、コンパイラの実装に依存します。
しかし、標準によれば、それは未定義でなければなりません。
標準では、これは未定義であると言われています。コンパイラは、演算子の優先順位規則に従っている限り、任意の順序でステートメントを自由に評価できます。これにより、UB が生成されます。
b++ * ++b; // b is modified more than once
これは未定義の動作であるため、最終結果はわかりません。結果は実装によって異なります。
未定義の動作です。演算子の優先順位が同じであるため、コンパイラはこの式を任意の順序で自由に評価できます。使用を検討してください
(b++)*(++b)
代わりは