Эксперименты

Задача о ++i + ++i

2007.07.28

Вот цитата #212679 с башорга:

    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.

Предыдущий: Разные коллажи Следующий: Разные режимы наложения в Photoshop