新しい c++11 標準では、シーケンス ポイントの記述方法が変更されたので、c++03 と c++11 の間で何が変更されたのかを正確に調べようとしています。
特に、同じように見えるコードが c++11 ではシーケンス ポイントを持ち、c++03 では持たないような状況はありますか?
新しい c++11 標準では、シーケンス ポイントの記述方法が変更されたので、c++03 と c++11 の間で何が変更されたのかを正確に調べようとしています。
特に、同じように見えるコードが c++11 ではシーケンス ポイントを持ち、c++03 では持たないような状況はありますか?
C++11 にはシーケンス ポイントはなく、シーケンスの前とシーケンスの後にリレーションがあります。
C++03 と C++11 で動作が異なるいくつかの簡単な例を次に示します。
int x = 10;
++++x; // well defined in C++11
int x = 10;
x = ++x +1; //well defined in C++11
なんで?この回答と関連するスレッドを見てください。
最もよく知られている例は、プレインクリメント演算子だと思います。
int i = 0;
++ ++ ++ i;
C++03 では、これは UB であり、C++11 では、各代入は次の評価の前に順序付けられます。
標準の違いを検索するのは困難です。なぜなら、彼らは「シーケンス ポイント」という用語を取り除き、「前に順序付け」などを優先し、ルールの多くをゼロから書き直したからです。