为什么在 C++ 中 true && false 等于 1?

Ale*_*vik 9 c++ boolean-logic boolean operator-precedence logical-operators

我在玩布尔值,最后得到了这行代码:

std::cout << true && false;

由于某种原因,它产生1. 这怎么可能,如果&&要求双方都为真,才能产生1

son*_*yao 13

因为operator<<具有较高的优先级operator&&std::cout << true && false;仅仅是相同(std::cout << true) && false;(即打印出true首先,则返回的std::cout被转换成bool,用被用作操作数falseoperator&&,其结果是在最后丢弃)。

请注意std::cout可以转换为boolvia operator bool,它可以用于上下文转换(包括作为 built-in 的操作数operator&&),即使它被标记为explicit

返回true如果流没有错误并准备进行I / O操作。具体来说,返回!fail().

您可以通过添加括号来指定优先级。

std::cout << (true && false);
Run Code Online (Sandbox Code Playgroud)


raw*_*rex 6

由于运算符的优先级true打印了 ,然后返回的operator<<(the std::cout)&&false

(std::cout << true) && false; // Equivalent 
Run Code Online (Sandbox Code Playgroud)