我很好奇C ++中内置bool
类型的一些行为。据我了解,std::common_type
使用隐式可转换性来确定常见类型。我希望带有bool
和另一种类型的表达式会导致bool转换为该类型。例如,我可以看到bool + float
- > float
和bool + double
- > double
。但是,bool + int8_t
- > int32_t
和bool + int16_t
- > int32_t
。为什么会这样?
答案 0 :(得分:10)
简短回答:整体推广。
在数值算术中,小积分类型(包括bool
,char
,unsigned char
,signed char
,short
,unsigned short
等)如果所有可能的值都适合int
,则会提升为int
,否则会将其提升为unsigned int
。
在今天的大多数计算机上,int32_t
与int
相同。对于bool + int8_t
或bool + int16_t
,两者都会提升为int
。