Здравствуйте, Fwiffo, Вы писали:
F>Здравствуйте, ajanov, Вы писали:
A>>Все доброго сремени суток!
A>>Сегодня у новичка увидел в коде:
A>>A>>a = a++;
A>>
A>>Так вот вопрос: какой должен быть результат? По правилам C++ значение a не должно измениться, однако все популярные компиляторы (MSVC, GCC) увеличивают значение на 1, а IAR выдает предуждение "undefined behavior".
F>Это что за правила такие?
F>Переменная модифицируется два раза между точками следования, так что результат может быть какой угодно.
F>Undefined behavior и есть.
Это правило последовательности выполнения операторов, а последовательность такова:
1) создается временный объект которому приписывается значение 'a'
2) значение а увеличивается на 1
3) а приписывается приписывается значение временного объекта — то есть начальное значение 'а'
Друго дело что писать
a = a++; — дурной тон