Есть ли ситуации, когда код имел бы точку последовательности в c ++ 11, но не в c ++ 03? - PullRequest
9 голосов
/ 15 февраля 2012

Теперь, когда новый стандарт c ++ 11 внес изменения в описание точек последовательности, я пытаюсь выяснить, что именно изменилось между c ++ 03 и c ++ 11.

В частности, есть ли ситуации, когда код, который выглядит одинаково, будет иметь точку последовательности в c ++ 11, но не в c ++ 03?

Ответы [ 2 ]

9 голосов
/ 15 февраля 2012

В C ++ 11 нет последовательностей, скорее, они упорядочены до и после отношений.

Вот несколько тривиальных примеров, в которых поведение между C ++ 03 и C ++ 11 * 1003 различается*

int x = 10;
++++x; // well defined in C++11

int x = 10;
x = ++x +1; //well defined in C++11

Почему?Посмотрите этот ответ и связанные темы.

4 голосов
/ 15 февраля 2012

Я думаю, что самым известным примером является оператор предварительного увеличения.

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

В C ++ 03 это будет UB, а в C ++ 11 каждое назначение упорядочено перед следующей оценкой.

Поиск в Стандарте различий труден, потому что они избавились от терминологии «точки последовательности» в пользу «заказанных ранее» и т. П. И переписали большую часть правил с нуля.

...