【发布时间】:2012-10-01 11:52:29
【问题描述】:
考虑一下这段代码(C++):
int x = -4 , y = 5 ;
bool result = x > 0 && y++ < 10 ;
表达式 (x > 0) 将首先被评估,因为 (x > 0 = false) 和由于短路评估,另一个表达式 (y++
现在考虑以下代码:
int x = -4 , y = 5 ;
bool result = (x > 0) && (y++ < 10) ;
预计括号中的表达式将首先被计算,以便在执行逻辑与之前,表达式 (y++
这个案例的解释是什么?!
【问题讨论】:
-
“预计括号中的表达式将首先被计算” -- 错误。括号没有区别,
x > 0在这两种情况下总是首先被评估。 -
括号可以覆盖优先级,但order of evaluation is independent of precedence。评估顺序由序列点 (C, C++98/03) 或排序约束 (C++11) 决定,而不是优先级或关联性。
-
除非出现 &&,否则永远不会评估右侧。虽然您认为应该首先在数学中评估括号是正确的,但布尔逻辑有点不同,因为它保证从左到右。
标签: java c++ logical-operators short-circuiting