(Точки последовательности описаны в п. 5.1.2.3, как точки в выполнении, где имели место все предыдущие побочные эффекты).

но я столкнулся с чем-то, что, как мне показалось, я понял сразу, но размышляя об этом больше, мне хотелось бы понять, почему это работает так, как работает.

Рассмотрим код ниже.(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

Ответы на вопрос(6)

Ваш ответ на вопрос