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)
有点丑。但我敢肯定有些人会提出不同意见。
最终,无论您如何编写,编译器都应该生成相同的结果。
为什么这个程序
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)
有点丑。但我敢肯定有些人会提出不同意见。
最终,无论您如何编写,编译器都应该生成相同的结果。