为什么是假&&假|| true 评估为 true?
Why is false && false || true evaluated to true?
我了解到,在短路估值中,如果初始值是 false
后跟 &&
,则表达式短路并且表达式被评估为 false
。
语句false && false || true
当然应该计算为false
,但它总是计算为true
。我原以为 false &&
足以知道表达式是 false
.
我理解为什么逻辑计算结果为 true
。我不明白的是这怎么仍然满足短路评估。
因为 ||
的优先级低于 &&
。它的计算结果为 (false && false) || true
;参见 http://en.cppreference.com/w/cpp/language/operator_precedence
有关操作顺序的文章,请参阅 "Programming Languages" 下的部分:https://en.wikipedia.org/wiki/Order_of_operation
本质上,&&
运算符先执行,然后再计算 ||
。在您的情况下,您在 x && y
中放入什么布尔值并不重要,因为 || true
将始终使其为真。
假&&假||真=(假&&假)||真实,因此,它是(任何或真实的),这肯定是真实的。
短路评估不会改变运算符的优先级。正如其他答案所指出的,表达式本质上是 (false && false) || true
。由于首先评估 && 运算符,它将跳过评估第二个 false 值(可能是 (false && _) || true
)。
然后,我们有一个 false || true
表达式,其计算结果为 true
。
如果表达式是false && (_)
,你的想法就是正确的。
我了解到,在短路估值中,如果初始值是 false
后跟 &&
,则表达式短路并且表达式被评估为 false
。
语句false && false || true
当然应该计算为false
,但它总是计算为true
。我原以为 false &&
足以知道表达式是 false
.
我理解为什么逻辑计算结果为 true
。我不明白的是这怎么仍然满足短路评估。
因为 ||
的优先级低于 &&
。它的计算结果为 (false && false) || true
;参见 http://en.cppreference.com/w/cpp/language/operator_precedence
有关操作顺序的文章,请参阅 "Programming Languages" 下的部分:https://en.wikipedia.org/wiki/Order_of_operation
本质上,&&
运算符先执行,然后再计算 ||
。在您的情况下,您在 x && y
中放入什么布尔值并不重要,因为 || true
将始终使其为真。
假&&假||真=(假&&假)||真实,因此,它是(任何或真实的),这肯定是真实的。
短路评估不会改变运算符的优先级。正如其他答案所指出的,表达式本质上是 (false && false) || true
。由于首先评估 && 运算符,它将跳过评估第二个 false 值(可能是 (false && _) || true
)。
然后,我们有一个 false || true
表达式,其计算结果为 true
。
如果表达式是false && (_)
,你的想法就是正确的。