C++中的32Bit和64Bit窗口中的兼容“int”类型是什么?
什么是C++中的兼容“int”数据类型,可以将其自身大小调整为32位的4个字节& 64位窗口上的8个字节?C++中的32Bit和64Bit窗口中的兼容“int”类型是什么?
尽管INT_PTR工作正常,但它降低了可读性,并且它的描述告诉我们将它用于指针运算。
谢谢
如果你正在寻找标准的东西,你是运气不好。该标准没有指定任何内置数据类型的大小。
请注意,INT_PTR
不暗示指针算术。我的意思是这种类型的尺寸与void *
相同,这正是你想要的。它不会在所有平台上工作,但(我很确定它是Windows特定的)。
它确实取决于编译器。我认为唯一(或多或少)可靠的方法是使用类似(void *)的指针类型。
我认为最好的方法是在你的头文件使用一些有条件的处理,并设置一个自定义类型:
#ifdef _WIN64
typedef __int64 NATIVEINT;
#else
typedef __int32 NATIVEINT;
#endif
(此示例是Visual C++)
该标准没有提及具体的尺寸要求,只是每个整体类型必须至少提供与之前类型相同的存储空间。所以int
必须持有多达short
,依此类推。你最好指定你所需要的。
如果要查找不会根据操作环境更改大小的整数,请查看Boost Integer Library或C99/C++ 11标头<cstdint>
。这包含诸如uint32_t
/int32_t
和uintmax_t
/intmax_t
的类型。
最重要的是,根据您的问题,它有:uintptr_t
/intptr_t
。这些保证有正确的大小以在您的平台上保持指针。
`signed size_t`?也许你的意思是gcc的`ssize_t`? :) – avakar 2009-07-23 07:56:58
下的Visual Studio,你也提供__int3264这的确大致相同INT_PTR ...
我想这个问题是倒过来 - 你需要不调整数据类型。调整数据类型的大小会导致代码可能在一个系统上运行,而在另一个系统上运行。 – 2009-07-23 07:29:27
* int *通常是平台中速度最快的整型。例如,如果你需要在循环中计数,只需使用* int *并让编译器为你做肮脏的技巧。 – 2009-07-23 07:36:17