Я недавно наткнулся на кое-что, что, как мне казалось, я понял сразу же, но, подумав подробнее, я хотел бы понять, почему это работает именно так.
Подумайте об этом. код ниже. (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