- Гоги, да скажи ты им наконец. Сколько будет дважды два? - Пять! - Да, где-то так. Пять, Шесть. (из бородатого анекдота).
Попалась на глаза любопытная статья про особенности C++. Самое забавное место:
Может ли C++ быть веселым? Давайте проверим! :) Я знаю несколько примеров, которые радуют программистский взгляд. И предлагаю взглянуть!
Разомнемся на кошках. Представьте, что вы видите следующий код:
int i = 5;
int j = i++ + ++i;
Чему будет равно j? Вы хорошо подумали? Дело в том, что правильный ответ – где-то от 10 до 14! Мой любимый GCC выдает 12, но это еще не предел. Стандарт C++ не обязывает, чтобы результат оператора ++ был вычислен до операции присвоения, поэтому ответ может меняться от компилятора к компилятору, и даже зависеть от ключей оптимизации. Ведь результат операции i = i++, и тот не определен! Желающие могут погуглить "C++ Sequence point", а мы пойдем дальше. :)
Да уж, придумывание оператора ++ (+= и прочих аналогичных) однозначно было злом, чтобы потом на сложных комбинациях народ сломал себе мозг и вместо однозначного упрощения пустился во все тяжкое.