微软为什么使用 __int32 等类型而不是 int32_t?

问题描述 投票:0回答:1

在使用 C++ 20 浏览 Visual Studio 中标准库头的实现时,我遇到了类型

__int64
,它看起来像一个内置类型,我无法转到它的定义。我用谷歌搜索并找到了微软的这篇文章。显然,类型
__int32
__int64
等是 Microsoft 特定的内置类型。

我想知道为什么微软使用这些类型而不是非微软特定的

int32_t
int64_t
类型,他们不应该实现同样的目标吗?当我查看这些定义时,它们只是
int
long long
等类型的 typedef,但我认为实现仍然保证
int32_t
等类型具有您期望的位数。如果这些类型/typedef 对于普通用户来说足够好并且可靠,为什么微软要使用他们自己的类型/typedef?如果使用这些类型有优势,为什么它们不将
int32_t
等键入为
__int32
等?有没有一种情况我可能想使用像
__int32
这样的类型而不是
int32_t

c++ visual-c++ integer built-in-types
1个回答
2
投票

因为 MSVC 早在 C++11 引入之前就已经存在了。对于需要固定大小的东西,显然他们必须使用自己的内部类型。这就是为什么它们有

__
前缀,因为标准规定以双下划线开头的名称在全局命名空间中保留

这也是为什么许多库定义自己的固定宽度类型甚至 C 和 C++ 关键字的原因,例如 gstreamer 的

guint32
gint
...、OpenCL 的
cl_int
cl_uint
...、Qt 的
quint32
quint64
...、boost 的
boost::uint32_t
、zlib 的
z_off64_t
...因为在它们出现几十年后,标准的 stdint.h 就出现了

其他编译器也做同样的事情。例如,GCC 和 Clang 有

__int128
,因为当前标准中没有
int128_t
。在将它们添加到新的 C 和 C++ 标准之前,它们还有
_Decimal32
_Decimal64
__DEC32_MAX__
__DEC128_MAX__
...

© www.soinside.com 2019 - 2024. All rights reserved.