cout 是将 bool 视为整数还是将整数视为 bool?

Does cout treat bool as integer or integer as bool?

为什么这个程序

int a = 8; 
cout << a && true ;
cout << typeid(a && true).name();

产出

8bool

坦率地说,我希望是“truebool”或“8int”。

cout 对象的运算符 << 是否涉及此问题,还是优先级问题?

是否像我们cout << true;那样将true转换为1? typeid(a && true) 给我们布尔值,尽管 cout << a && true; 显然是一个数字?

确实是 operator precedence 问题。 << 的优先级高于 &&

一个 shorthand 可以用来将整数值解释为 bool 的技巧是对它进行加倍运算:

cout << !!a;

这是一个风格问题,在 C++ 社区中可能存在分歧。所以,如果不想引起争议,那么下面的可能更能接受:

cout << (a ? true : false);
cout << static_cast<bool>(a);
cout << (a != 0);

个人认为(a && true)有点丑。但我敢肯定有些人会提出不同意见。

最终,无论您如何编写,编译器都应该生成相同的结果。