混合运算符优先级的 Visual C++ 语句

Visual C++ statement with mixture of operators priority

我在使用 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。

我不明白的是y怎么能等于-2?在我的计算中应该是-3!

我参考了这个link:https://msdn.microsoft.com/en-us/library/126fe14k.aspx

|| 运算符的右侧未执行,因为左侧表达式 && 运算符的计算结果为真。

所以只发生了y++,剩下-2。

我不是专家,但这是我的观点:

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

((--x + y && y++ - x) 解析为非零的 -4,因此为真。所以x-- + (--y + x++))不需要检查也不需要执行那个代码。

在表达式 (--x + y && y++ - x) 中有一个 --x,因此将导致 x 的减少,而 y++ 将导致 y 的增加,即。 y=-3+1.