Почему получается разный ответ?

213
21 декабря 2019, 10:10
#include <iostream>
int main() {
    std::cout << (char)std::cin.get() << " " << (char)std::cin.get();
    system("pause");
    return 0;
}

При вводе "12" получаю "2 1". В то время как при

#include <iostream>
int main() {
    std::cout << (char)std::cin.get() << " ";
    std::cout << (char)std::cin.get();
    system("pause");
    return 0;
}

получаю "1 2".

Answer 1

Обновите компилятор или включите в его настройках новый стандарт (С++17 или новее).

До С++17 операнды << и >> могли вычисляться в произвольном порядке, и ваш компилятор решил вычислять их справа налево.

В С++17 это поправили, и теперь операнды << и >> вычисляются строго слева направо.

Подробнее: What are the evaluation order guarantees introduced by C++17?

Answer 2

Говоря простым языком, порядок в котором будут вычисляться операнды оператора << не определён. т.е. неизвестно, какой вызов std::cin.get() будет вычислен первым.

В С++17 у компилятора отобрали такую свободу действий, так что при компиляции достаточно новым компилятором с соответствующими флагами будет гарантирован вывод 1 2.

Общий список правил накладываемых на порядок вычисления в выражениях можно можно почитать например здесь. Он довольно нудный и витиеватый, так что я бы советовал руководствоваться принципом «если есть сомнения в порядке, в котором будут вычисляться подвыражения, помести их в разные операторы»

READ ALSO
Нужно получить шрифт из QFontComboBox

Нужно получить шрифт из QFontComboBox

Делаю текстовый редакторНужно чтобы при изменении значения в QFontComboBox* FStyleList в текстовоее поле QTextEdit* MainTextEdit устанавливался нужный шрифт

224
Как сделать иконку из картинки, лежащей в одной папке с проектом?

Как сделать иконку из картинки, лежащей в одной папке с проектом?

Пытаюсь назначить иконку приложенияПодключил ее в ресурсном файле

184
Все ли файлы нужно загружать на GitHub?

Все ли файлы нужно загружать на GitHub?

Допустим хочу выгрузить android-проект на githubТак вот возник вопрос, может и глупый, но все же

204