我理解在短路评估中,如果初始值为false
后跟&&
,则表达式短路,表达式评估为false
。
声明false && false || true
当然应该评估为false
,但总是评估为true
。我原以为false &&
就足以知道表达式是false
。
我理解为什么逻辑评估为true
。我不明白的是这仍然是如何满足短路评估。
答案 0 :(得分:2)
请参阅"编程语言"关于操作顺序的这篇文章:https://en.wikipedia.org/wiki/Order_of_operation
基本上,在评估&&
之前,||
运算符首先执行。在您的情况下,您放在x && y
中的布尔值并不重要,因为|| true
将始终使其成为现实。
答案 1 :(得分:1)
因为||
的优先级低于&&
。它评估为(false && false) || true
;见http://en.cppreference.com/w/cpp/language/operator_precedence
答案 2 :(得分:1)
短路评估不会改变运算符优先级。正如其他答案所指出的,表达式基本上是(false && false) || true
。自从&&首先评估运算符,它将跳过评估第二个错误值(可能是(false && _) || true
)。
然后,我们有一个false || true
表达式,其值为true
。
如果表达式是false && (_)
,那么您的想法就是正确的。
答案 3 :(得分:-2)
false&&假|| true =(false&& false)||是的,因此,它是(任何或者是真的),这当然是真的。