@Marvel_K

Является ли результат выражения UB?

Привет.

subj, вот такие примеры

i = i++;  /* присваивание дважды (?) */
i = ++i;  /* всё ок? */


p[i] = i++;
p[i] = ++i;


a = b = c = 0;  /* всегда считал что (a = (b = (c = 0))), из-за ассоциативности */


На размышления подтолкнула alenacpp.blogspot.com/2005/11/sequence-points.html , но прочитав статью и комментарии, для себя однозначного ответа не нашел. Где истина?)
  • Вопрос задан
  • 154 просмотра
Решения вопроса 2
Andrey2008
@Andrey2008
DevRel в PVS-Studio
Всё сложно, так как стандарт меняется.

i = i++;  // Это было неопределённым поведением до C++17
i = ++i;  // А это было неопределённое поведение до C++11
p[i] = i++;  // Это было неопределённым поведением до C++17

Ещё на эту тему см. V567.

В общем, теперь всё ещё более запутано и фиг разберёшься. :)

Что делать? А просто не надо писать такие конструкции. Даже если теперь они стали корректными. Они путают программиста, читающего код и заставляют задумываться. Не делайте так. И пользуйтесь анализаторам PVS-Studio. Он укажет на непроектные и плохо написанные фрагменты кода.
Ответ написан
gbg
@gbg
Любые ответы на любые вопросы
Все UB кроме последнего, потому что "=" не является точкой следования.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы