C ++中兼容的“int”数据类型是什么,它可以在32位和32位上将自身大小调整为4个字节。 64位窗口上有8个字节?
尽管INT_PTR工作正常但它降低了可读性,并且它的描述告诉我们将它用于指针算法。
由于
答案 0 :(得分:3)
如果你正在寻找标准的东西,那你就不走运了。该标准未指定任何内置数据类型的大小。
注意,INT_PTR
并不意味着指针算术。我的意思是该类型与void *
具有相同的大小,这正是您想要的。它不适用于所有平台(我很确定它是Windows特定的)。
答案 1 :(得分:3)
标准没有提到具体的尺寸要求,只是每个整体类型必须提供至少与之前类型相同的存储空间。因此,int
必须与short
保持一致,依此类推。你最好指定一下你需要它们。
如果您正在寻找不会根据操作环境更改大小的整数,请查看Boost Integer Library或C99 / C ++ 11标题<cstdint>
。其中包含uint32_t
/ int32_t
和uintmax_t
/ intmax_t
等类型。
最重要的是,根据您的问题,它有:uintptr_t
/ intptr_t
。这些保证具有正确的大小,以便在您的平台上保持指针。
答案 2 :(得分:3)
在Visual Studio下,您还可以获得__int3264,其功能与INT_PTR ...
相同答案 3 :(得分:1)
这实际上取决于编译器。我认为唯一(或多或少)可靠的方法是使用类似(void *)的指针类型。
我认为最好的方法是在头文件中使用一些条件处理并设置自定义类型:
#ifdef _WIN64
typedef __int64 NATIVEINT;
#else
typedef __int32 NATIVEINT;
#endif
(此示例适用于Visual C ++)
答案 4 :(得分:0)
这可能会对您有所帮助:http://lists.debian.org/debian-user/2006/04/msg00681.html。不幸的是,你的问题似乎与编译器有关。