Меняется ли порядок операций внутри выражения if?

Я недавно наткнулся на кое-что, что, как мне казалось, я понял сразу же, но, подумав подробнее, я хотел бы понять, почему это работает именно так.

Подумайте об этом. код ниже. (x-- == 9) явно оценивается, а (y ++ == 11) - нет. Моя первая мысль была такой логичной Включается && , видит, что выражение уже стало ложным, и прекращает работу, прежде чем вычислить вторую часть выражения.

Чем больше я думаю об этом, тем больше не понимаю, почему это ведет себя именно так. Насколько я понимаю, логические операторы находятся ниже операций приращения в порядке приоритета. Не следует ли вычислять (y ++ == 11) , даже если общее выражение уже стало ложным?

Другими словами, порядок операций не должен указывать на (y ++ == 11) вычисляться до того, как оператор if понимает, что выражение в целом будет ложным?

#include <iostream>
using namespace std;

int main( int argc, char** argv )
{
    int x = 10;
    int y = 10;

    if( (x-- == 9) && (y++ == 11) )
    {
        cout << "I better not get here!" << endl;
    }

    cout << "Final X: " << x << endl;
    cout << "Final Y: " << y << endl;
    return 0;
}

Вывод:

Final X: 9
Final Y: 10
31
задан user7116 21 July 2011 в 22:16
поделиться