6

(++i)++は未定義の動作ですか?後置インクリメントがインクリメントされるインクリメントされたオブジェクトを取得した後にプレフィックスインクリメントの副作用が発生する可能性はありますか?それは私には奇妙に思えるだろう。(++ i)++は未定義の動作ですか?

これはC++ 03で定義されておらず、C++ 11でよく定義されています。私は正しい?

+0

あなたの腸の感触は正しいです。 – ybungalobill

+43

なぜ多くの人がこれについて質問するのですか?ただしないでください。誰が何を気にしているのですか?**恐ろしいコードなので、とにかく書くべきではありません。** – jjnguy

+12

@jjnguy:「書くべきではありません」と「何か重要なことをするプロダクションコード"それから学ぶために、よく知られている悪いコードを書くことは良いことです。コントロールされた方法で失敗する、予測された失敗などをテストする – David

答えて

11

これはC++ 03で定義されておらず、C++ 0xでよく定義されています。

はい、あなたは正しいです。 2つのシーケンスポイントの間で複数回iを変更しようとしているため、C++ 03での動作は未定義です。

(++i)++(i += 1)++に相当するため、この動作はC++ 0xで定義されています。 +=演算子の副作用は、++(ポストインクリメント)を基準にして配列されているため、その動作は明確に定義されています。

0

iが2つのシーケンスポイント間で複数回変更されているため、これは未定義の動作です。

関連する問題