2012-02-15 10 views
9

新しいC++ 11標準がシーケンスポイントの記述方法を変更したので、私はC++ 03とC++ 11の間で何が変更されたかを正確に調べようとしています。C++ 11ではなくC++ 03でコードにシーケンスポイントがある状況はありますか?

特に、同じように見えるコードがC++ 11ではシーケンスポイントを持ち、C++ 03ではシーケンスポイントを持たない状況はありますか?

答えて

9

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 

なぜ間で異なる特徴いくつかの些細な例ですか?回答と関連スレッドthisを見てください。

4

よく知られている例は、プリインクリメント演算子です。

int i = 0; 
++ ++ ++ i; 

C++ 03ではこれがUBであり、C++ 11では、各割り当てが次の評価の前に順序付けられます。

標準の検索では、「順序ポイント」という用語が「前に順序付けられた」などの理由で取り除かれ、多くのルールが最初から書き直されているため、苦労しています。

+0

'標準点の検索では「シーケンスポイント」という用語が使われていないので、これは厳しいですが、これが私がこの質問を投稿した正確な理由です。 – shuttle87

+0

@ shuttle87うん、それについては申し訳ありませんが、少なくとも私は1つの例を思いつきました; v) – Potatoswatter

関連する問題