#cpp
#includeint main() { std::cout << (char)std::cin.get() << " " << (char)std::cin.get(); system("pause"); return 0; } При вводе "12" получаю "2 1". В то время как при #include int main() { std::cout << (char)std::cin.get() << " "; std::cout << (char)std::cin.get(); system("pause"); return 0; } получаю "1 2".
Ответы
Ответ 1
Обновите компилятор или включите в его настройках новый стандарт (С++17 или новее). До С++17 операнды << и >> могли вычисляться в произвольном порядке, и ваш компилятор решил вычислять их справа налево. В С++17 это поправили, и теперь операнды << и >> вычисляются строго слева направо. Подробнее: What are the evaluation order guarantees introduced by C++17?Ответ 2
Говоря простым языком, порядок в котором будут вычисляться операнды оператора << не определён. т.е. неизвестно, какой вызов std::cin.get() будет вычислен первым. В С++17 у компилятора отобрали такую свободу действий, так что при компиляции достаточно новым компилятором с соответствующими флагами будет гарантирован вывод 1 2. Общий список правил накладываемых на порядок вычисления в выражениях можно можно почитать например здесь. Он довольно нудный и витиеватый, так что я бы советовал руководствоваться принципом «если есть сомнения в порядке, в котором будут вычисляться подвыражения, помести их в разные операторы»
Комментариев нет:
Отправить комментарий