首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__int32与int对int32_t的区别(再次)

__int32与int对int32_t的区别(再次)
EN

Stack Overflow用户
提问于 2020-10-07 09:37:59
回答 1查看 1.4K关注 0票数 1

网络上的答案()只讲述了故事的部分内容,省略了一些我希望你帮我澄清的细节:

  • 按照C++标准,int必须是>= 32位。
  • 不同的编译器(实现)可以使int在默认情况下分配不同数量的位。因此,当我声明整数时,Compiler A可以使int分配50位(例如)。
  • 另外,不同的编译器可能/不可能使用钻头填充进行优化。
  • __int32 (Microsoft-specifc)和int32_t来解决这个问题,并且:。
    • 强制编译器分配确切的32位。
    • 永远不要使用前/后位填充这种数据类型。

我的猜测中哪一个是正确的?很抱歉再提一个老问题,但我对所有的分配功能都感到困惑。

提前谢谢你的时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 09:52:57

我的猜测中哪一个是正确的?

  • 按照C++标准,int必须是>= 32位。

不对。int必须是>= 16位。long必须是>= 32位。

不同的编译器(实现)可以使int分配不同数量的位。

对,是这样。

..。默认情况下。

我不知道具有可配置int大小的编译器--它通常直接依赖于目标体系结构--但我认为这是可能的。

另外,不同的编译器可能/不可能使用位填充。

他们可能会。他们没必要这么做。

__int32 (Microsoft)和int32_t是为了解决这个问题而来的,并且:

  • 强制编译器分配确切的32位。
  • 不要在此数据类型之前/之后使用位填充。

对,是这样。更具体地说,std::int32_t是基本类型之一的别名,它只有32位,没有填充。如果编译器没有提供这种整数类型,那么也不会提供std::int32_t别名。

微软文档承诺__int32存在,它是int的另一个名称,它有32个非填充位。在其他地方,微软记录称int32_t也是int的别名。因此,除了__int32不是标准名称之外,没有其他区别。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64241283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档