我一直在玩布尔运算,最后得到了这行代码:
std::cout << true && false;
由于某种原因,其产生CCD_ 2。如果为了产生1
,&&
要求两边都为真,这怎么可能呢?
由于operator<<
的优先级高于operator&&
,因此std::cout << true && false;
与(std::cout << true) && false;
相同(即先打印出true
,然后将返回的std::cout
转换为bool
,作为operator&&
与false
的操作数,最后丢弃结果)。
注意,std::cout
可以通过operator bool
转换为bool
,即使标记为explicit
,也可以用于上下文转换(包括作为内置operator&&
的操作数)。
如果流没有错误并且可以进行I/O操作,则返回
true
。具体返回1
0。
您可以通过添加括号来指定优先级。
std::cout << (true && false);
由于运算符的优先级,打印true
,然后返回operator<<
(std::cout
)的&&
和false
。
(std::cout << true) && false; // Equivalent