2012-02-15 5 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 Да, извините, но, по крайней мере, я придумал один пример: v) – Potatoswatter