2014-01-24 4 views
21

см простой пример:Is a = 0; b = (a ++, a + 1); неопределенное поведение (UB)?

int a = 0; 
int b = (a ++ , a + 1); // result of b is UB or well defined ? (c++03). 

Это было изменено в C++ 11/C++ 14?

+0

+1 для приятного вопроса. Поскольку все обсуждения, которые я видел здесь, касались таких утверждений, как 'int b = ++ a + a ++;'. Но вам действительно нужно это в коде, или это просто любопытство? –

+7

Я считаю, что это действительно определено. Оператор запятой является точкой последовательности. – Mysticial

+0

related http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points – user2485710

ответ

28

Результат хорошо определен и был с C++ 98. Оператор запятой вводит точку последовательности (или «упорядоченную до» отношения в более поздних C++) между записью и вторым чтением a, и я не вижу других потенциальных причин неопределенного поведения.

+7

Обратите внимание, что данный код также является вполне законным в C и дает определенные результаты в C. –

+1

@JerryCoffin: Это правда. Я ограничил домен моего «с», чтобы ссылаться только на версии C++. –

+2

Я сильно * верю *, этот код, когда большинство людей не знают наверняка, другие должны добавить «я верю ...», и только некоторые из них наверняка не точно определены * – SChepurin

Смежные вопросы