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,用被用作操作数false的operator&&,其结果是在最后丢弃)。
请注意std::cout可以转换为boolvia operator bool,它可以用于上下文转换(包括作为 built-in 的操作数operator&&),即使它被标记为explicit。
返回
true如果流没有错误并准备进行I / O操作。具体来说,返回!fail().
您可以通过添加括号来指定优先级。
std::cout << (true && false);
Run Code Online (Sandbox Code Playgroud)
由于运算符的优先级,true打印了 ,然后返回的operator<<(the std::cout)&&与false。
(std::cout << true) && false; // Equivalent
Run Code Online (Sandbox Code Playgroud)