在使用 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
?
因为 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 就出现了
__int128
,因为当前标准中没有 int128_t
。在将它们添加到新的 C 和 C++ 标准之前,它们还有 _Decimal32
、_Decimal64
、__DEC32_MAX__
、__DEC128_MAX__
...