2015-06-21 51 views
10

我很好奇C++中内建的bool类型的一些行为。据我了解,std::common_type决定使用隐式可转换性的通用类型。我期望bool和另一种类型的表达式会导致bool转换为该类型。例如,我可以看到bool + floatfloatbool + doubledouble。但是,bool + int8_tint32_tbool + int16_tint32_t。为什么会这样?为什么在C++中bool和int8_t的常见类型是int32_t?

回答

10

简短回答:积分促销

在数值运算,小积分类型(包括boolcharunsigned charsigned charshortunsigned short等)被提升到int如果所有可能的值适合在int,否则将它们提升到unsigned int

今天大多数机器上,int32_tint相同。在bool + int8_tbool + int16_t的情况下,两者都被提升为int

+0

谢谢俞灏!那很棒。你知道这个标准在哪里提到吗? – user2333829

+1

@ user2333829 *§4.5积分促销* –

+0

谢谢,你回答了我的问题!我觉得很奇怪,但很显然。 – user2333829

相关问题