案例1和其他两种情况有什么区别?
案例1:false && false || true
案例2:(false && false) || true
案例3:false && ( false || true )
答案 0 :(得分:8)
&&
的优先级高于||
,因此案例1等同于案例2。
请参阅:http://en.cppreference.com/w/cpp/language/operator_precedence
实际上,案例1和案例2是等效的表达式,但是可能存在表达式树本身不同的情况,例如:
true == false && false || true // A
true == (false && false) || true // B
// not the same!
这里他们读作:
((true == false) && false) || true // A
(true == (false && false)) || true // B
因为==
的优先级高于&&
。
答案 1 :(得分:1)
答案 2 :(得分:0)
Case 1 : false && false || true => true
Case 2 : (false && false) || true => true
Case 3 : false && ( false || true ) => false
括号中的操作应始终在其他操作之前执行。
case 2 : (false && false) || true => false || true => true
case 3 : false && ( false || true ) => false && true => false
case 1 : false && false || true => false || true => true
答案 3 :(得分:0)
对于案例3,短路评估会在&&和& amp;&被忽略。