см простой пример: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?
см простой пример: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?
Результат хорошо определен и был с C++ 98. Оператор запятой вводит точку последовательности (или «упорядоченную до» отношения в более поздних C++) между записью и вторым чтением a
, и я не вижу других потенциальных причин неопределенного поведения.
Обратите внимание, что данный код также является вполне законным в C и дает определенные результаты в C. –
@JerryCoffin: Это правда. Я ограничил домен моего «с», чтобы ссылаться только на версии C++. –
Я сильно * верю *, этот код, когда большинство людей не знают наверняка, другие должны добавить «я верю ...», и только некоторые из них наверняка не точно определены * – SChepurin
+1 для приятного вопроса. Поскольку все обсуждения, которые я видел здесь, касались таких утверждений, как 'int b = ++ a + a ++;'. Но вам действительно нужно это в коде, или это просто любопытство? –
Я считаю, что это действительно определено. Оператор запятой является точкой последовательности. – Mysticial
related http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points – user2485710