Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

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

#cpp


#include 
int 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. Общий список правил накладываемых на порядок вычисления в выражениях можно можно почитать например здесь. Он довольно нудный и витиеватый, так что я бы советовал руководствоваться принципом «если есть сомнения в порядке, в котором будут вычисляться подвыражения, помести их в разные операторы»

Комментариев нет:

Отправить комментарий