考虑这段代码(C++):
int x = -4 , y = 5 ;
bool result = x > 0 && y++ < 10 ;
Run Code Online (Sandbox Code Playgroud)
表达式(X> 0)将被首先计算,并且因为(X> 0 =假),并且由于短路评价,其他表达(Y ++ <10)将不会被评价和y的值将保持5 .
现在考虑以下代码:
int x = -4 , y = 5 ;
bool result = (x > 0) && (y++ < 10) ;
Run Code Online (Sandbox Code Playgroud)
可以预期,在括号中的表达式将被首先计算,使得逻辑AND被执行时,表达之前(Y ++ <10)将已被评估和y的值已成为6,但现实情况是,y的值仍然是5.这意味着即使使用括号,评估也会被短路,并且忽略表达式(y ++ <10).
这个案子有什么解释?