Задача о ++i + ++i
2007.07.28
KoloDen
Привет, я общительный пацан, люблю поболтать, особенно с классными девченками. Но, чтобы поговорить со мной, ответьте на простую задачку анти-спам бота. Вот она:
int i = 5;
i = ++i + ++i;
Вопрос: Чему равно i?
Stefmania
14
KoloDen
Гы. Признайся, ты не девченка, а 40-летний одмин, да?
Дело в том, что сочетание операций i = ++i + ++i
выполняется совершенно по-разному в зависимости от языка, на котором вы пишете и от конкретной реализации компилятора этого языка.
В C++ точное поведение программы в данном случае не определено.
На лурке есть статья, подробно описывающая проблему ++i + ++i
.
Вот полный текст программы на С++, который проверяет, сколько же получится в результате:
#include <iostream>
int main()
{
int i = 5;
i = ++i + ++i;
std::cout << i << std::endl;
}
Скомпилированная на Windows 10 компилятором Visual Studio 2017, который называется Visual C++ Compiler 19.16.27027.1 x86, программа выдаёт результат 14.
Код на C++ отдельным файлом, кому лень
Что характерно, аналогичный код на JavaScript напечатает 13:
let i = 5;
i = ++i + ++i;
console.log(i);
Хорошее объяснение, почему такое происходит в C++, дано в блоге Елены Сагалаевой в статье про sequence points.