为什么在 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&&
有更高的precedence,std::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);
我在玩弄布尔值,最后得到了这行代码:
std::cout << true && false;
由于某种原因,它会产生 1
。这怎么可能,如果 &&
要求双方都为真,为了产生 1
?
由于operator precedence,打印了true
然后operator<<
(std::cout
)的return是&&
与 false
.
(std::cout << true) && false; // Equivalent
因为operator<<
比operator&&
有更高的precedence,std::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);