我在玩布尔型变量时尝试了以下代码:
std::cout << true && false;
出乎意料的是,这段代码输出了1
。如果 &&
需要两边都为真才能输出1
,那么这怎么可能呢?
我在玩布尔型变量时尝试了以下代码:
std::cout << true && false;
出乎意料的是,这段代码输出了1
。如果 &&
需要两边都为真才能输出1
,那么这怎么可能呢?
operator<<
比operator&&
的precedence更高,所以std::cout << true && false;
与(std::cout << true) && false;
是相同的(即首先打印出true
,然后将返回的std::cout
转换为bool
,它与false
一起用作operator&&
的操作数,最后将结果丢弃)。
请注意,std::cout
可以通过operator bool
转换为bool
,即使它被标记为explicit
,也可以在contextual conversions(包括作为内置operator&&
的操作数)中使用。
如果流没有错误并准备好进行I/O操作,则返回
true
。具体来说,返回!fail()
。
您可以通过添加括号来指定优先级。
std::cout << (true && false);
<<
和>>
这两个运算符被重载用于流操作,而在混合算术/逻辑表达式中有效的优先级对于流操作来说并不适用。 - Pete Becker