网络上的答案(一,二)只讲述了故事的一部分,并省略了一些我希望您帮助我澄清的细节:
int默认情况下,不同的编译器(实现)可以分配不同数量的位。所以Compiler A可以int在我声明整数时分配 50 位(例如)。__int32(Microsoft 特定) 并int32_t在这里解决问题,并且:
我的哪个猜测是正确的?很抱歉再次提出旧问题,但我实际上对所有这些分配功能感到困惑。
在此先感谢您的时间。
我的哪个猜测是正确的?
- 根据 C++ 标准,int 必须 >= 32 位。
不正确。int必须 >= 16 位。long必须 >= 32 位。
不同的编译器(实现)可以使 int 分配不同数量的位
正确的。
... 默认情况下。
我不知道具有可配置 int 大小的编译器 - 它通常直接取决于目标架构 - 但我认为这是一种可能性。
此外,不同的编译器可能/可能不使用位填充
他们可能会。他们不需要。
__int32 (Microsoft-specifc) 和 int32_t 是用来解决问题的,并且:
强制编译器准确分配 32 位。
切勿在此数据类型之前/之后使用位填充。
正确的。更具体地说,std::int32_t是其中一种基本类型的别名,它恰好具有 32 位且没有填充。如果编译器没有提供这样的整数类型,那么std::int32_t别名也不会提供。
Microsoft 文档承诺__int32存在并且它是 的另一个名称int,并且它有 32 个非填充位。在其他地方,Microsoft 文档int32_t也是int. 因此,除了__int32不是标准名称之外,没有其他区别。