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

Why is true && false equal to 1 in C++?

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

std::cout << true && false;

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

由于operator precedence,打印了true然后operator<<std::cout)的return是&&false.

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

因为operator<<operator&&有更高的precedencestd::cout << true && false;(std::cout << true) && false;一样(即先打印出true,然后将返回的std::cout转换为bool,与false一起作为operator&&的操作数,最后丢弃结果。

请注意,std::cout 可以通过 operator bool, which could be used in contextual conversions 转换为 bool(包括作为内置 operator&& 的操作数),即使它被标记为 explicit .

Returns true if the stream has no errors and is ready for I/O operations. Specifically, returns !fail().

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

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