为什么bool和int8_t的常见类型是C ++中的int32_t?

时间:2015-06-21 12:19:49

标签: c++ c++11 boolean std

我很好奇C ++中内置bool类型的一些行为。据我了解,std::common_type使用隐式可转换性来确定常见类型。我希望带有bool和另一种类型的表达式会导致bool转换为该类型。例如,我可以看到bool + float - > floatbool + double - > double。但是,bool + int8_t - > int32_tbool + int16_t - > int32_t。为什么会这样?

1 个答案:

答案 0 :(得分:10)

简短回答:整体推广

在数值算术中,小积分类型(包括boolcharunsigned charsigned charshortunsigned short等)如果所有可能的值都适合int,则会提升为int,否则会将其提升为unsigned int

在今天的大多数计算机上,int32_tint相同。对于bool + int8_tbool + int16_t,两者都会提升为int