VS Code中C++布尔运算结果与预期不符的原因是什么?
问题根源:运算符优先级导致的执行顺序错误
你的代码里的问题出在cout输出运算符<<的优先级高于逻辑运算符&&和||,导致代码的执行逻辑和你预期的完全不一样。
正确的表达式计算结果
按照C++运算符优先级,&&的优先级高于||,所以先计算所有&&子表达式:
a && !d→true && false→falsea && b→true && false→false!c→false
再用||连接所有结果:false || false || false → false,这和你预期的结果一致。
你的代码实际执行了什么
因为<<的优先级比&&和||高,所以你的代码行:
cout << a && !d || !c || a && b;
会被编译器解析成:
((cout << a) && !d) || !c || (a && b);
执行步骤是:
- 先执行
cout << a:输出true对应的整数1,然后返回cout对象(在逻辑运算中会被视为true)。 - 接着计算
(cout对象) && !d:true && false→false。 - 再计算
false || !c:false || false→false。 - 最后计算
false || (a && b):false || false→false。
你看到的输出1其实是cout << a的结果,而整个布尔表达式的最终结果false并没有被输出——你误以为这个1是表达式的运算结果,这才产生了误解。
修复方法
要让cout输出整个布尔表达式的结果,需要给整个表达式加上括号,强制改变运算顺序:
cout << (a && !d || !c || a && b);
这样编译器会先计算括号内的布尔表达式(结果为false),再将其输出为0,和你预期的结果一致。
内容的提问来源于stack exchange,提问作者Adam Aren
相关产品推荐
相关产品推荐

