1

重複の可能性:
未定義の動作とシーケンス ポイント

次のステートメントの動作を説明してください

int b=3;
cout<<b++*++b<<endl;

どのように計算されますか?

4

5 に答える 5

4

ここでの動作は未定義です。この質問を参照してください

関連する標準見積もり:

§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.

于 2011-08-02T17:29:10.120 に答える
1

他の人が言ったように、動作は未定義になります。出力は、コンパイラの実装に依存します。

しかし、標準によれば、それは未定義でなければなりません。

于 2011-08-02T17:43:56.343 に答える
1

標準では、これは未定義であると言われています。コンパイラは、演算子の優先順位規則に従っている限り、任意の順序でステートメントを自由に評価できます。これにより、UB が生成されます。

b++ * ++b; // b is modified more than once
于 2011-08-02T17:27:46.017 に答える
0

これは未定義の動作であるため、最終結果はわかりません。結果は実装によって異なります。

于 2011-08-02T17:28:18.507 に答える
-1

未定義の動作です。演算子の優先順位が同じであるため、コンパイラはこの式を任意の順序で自由に評価できます。使用を検討してください

(b++)*(++b)

代わりは

于 2011-08-02T17:49:07.310 に答える