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

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

std::cout << true && false;

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

回答

因为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);


回答

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

(std::cout << true) && false; // Equivalent 


以上是为什么在C++中true&amp;&amp;false等于1?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>