考虑以下代码(C ++):
int x = -4 , y = 5 ;
bool result = x > 0 && y++ < 10 ;
表达式(x>0)将首先被评估,因为(x>0=false),由于短路评估,另一个表达式(y++<10)不会被评估,y的值将保持为5。
现在考虑以下代码:
int x = -4 , y = 5 ;
bool result = (x > 0) && (y++ < 10) ;
预期在括号中的表达式将会首先被计算,这意味着在执行逻辑“与”操作之前,表达式(y++ < 10)已经被计算并且y的值变成了6,但事实上,y仍然等于5。这意味着即使使用了括号也进行了短路处理,表达式(y++ < 10)被忽略了。
这种情况的解释是什么?!
x>0
始终首先被评估。 - Adam Rosenfield