c++ - 为什么bool和int8_t的普通类型在C++中是int32_t?

标签 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。为什么会这样?

最佳答案

简答:积分推广

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

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

关于c++ - 为什么bool和int8_t的普通类型在C++中是int32_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964431/

相关文章:

c++ - Wavefront OBJ 解析 - 为什么我总是得到不正确的数据作为输出?

c++ - 为什么 std::binary_search 返回 bool?

java - 是否有一个命令可以检查数组中的某个值?

c++将数据源函数作为参数传递

java - 使页脚不可点击 ListView - Android

C:如何区分字符串和整数?输出可以很好地打印整数,但不能打印字符串

C++ 引用参数和 C 链接

c++ - 获取链接错误 : Extern in C++. 如何访问在文件 A.CPP 中修改的变量的值在另一个文件文件 B.CPP 中

c++ - 共享内存中的映射

c++ - 为什么编译器没有选择基于enable_if的特化