我使用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 !
我参考了这个链接:https://msdn.microsoft.com/en-us/library/126fe14k.aspx
答案 0 :(得分:0)
||
运算符的右侧未执行,因为左侧表达式&&
运算符的计算结果为true。
所以只发生y++
,将其保留为-2。
答案 1 :(得分:0)
我不是专家,但这是我的观点:
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。