Visual C ++ оператор со смесью приоритетов операторов - PullRequest
0 голосов
/ 10 июня 2018

У меня есть проблема с использованием Visual Studio 2017:

int x = 2, y = -3;
cout << ((--x + y && y++ - x) || x-- + (--y + x++)) << endl;
cout << "x = " << x << ", y = " << y << endl << endl;

Это всегда показывает, что результатом всего оператора является 1 (что нормально) и что x = 1 и y = -2.

Что я не понимаю, так это как у равно -2 ?В моем расчете это должно быть -3 !

Я ссылался на эту ссылку: https://msdn.microsoft.com/en-us/library/126fe14k.aspx

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Я не эксперт, но вот мои взгляды:

cout << ((--x + y && y++ - x) || x-- + (--y + x++)) << endl;

((--x + y && y++ - x) разрешается в -4, что не равно нулю и, следовательно, верно.Так что x-- + (--y + x++)) не нужно проверять и не нужно выполнять этот код.

в выражении (--x + y && y++ - x) есть --x, так что это приведет к уменьшению x, а y ++ приведет кс шагом в у, т.е.у = -3 + 1

0 голосов
/ 10 июня 2018

Правая часть оператора || не выполняется, так как оператор левого выражения && оценивается как true.

Таким образом, имеет место только y++, оставляя его как-2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...