C++中的32Bit和64Bit窗口中的兼容“int”类型是什么?

问题描述:

什么是C++中的兼容“int”数据类型,可以将其自身大小调整为32位的4个字节& 64位窗口上的8个字节?C++中的32Bit和64Bit窗口中的兼容“int”类型是什么?

尽管INT_PTR工作正常,但它降低了可读性,并且它的描述告诉我们将它用于指针运算。

谢谢

+0

我想这个问题是倒过来 - 你需要不调整数据类型。调整数据类型的大小会导致代码可能在一个系统上运行,而在另一个系统上运行。 – 2009-07-23 07:29:27

+0

* int *通常是平台中速度最快的整型。例如,如果你需要在循环中计数,只需使用* int *并让编译器为你做肮脏的技巧。 – 2009-07-23 07:36:17

如果你正在寻找标准的东西,你是运气不好。该标准没有指定任何内置数据类型的大小。

请注意,INT_PTR不暗示指针算术。我的意思是这种类型的尺寸与void *相同,这正是你想要的。它不会在所有平台上工作,但(我很确定它是Windows特定的)。

它确实取决于编译器。我认为唯一(或多或少)可靠的方法是使用类似(void *)的指针类型。

我认为最好的方法是在你的头文件使用一些有条件的处理,并设置一个自定义类型:

#ifdef _WIN64 
    typedef __int64 NATIVEINT; 
#else 
    typedef __int32 NATIVEINT; 
#endif 

(此示例是Visual C++)

这可以帮助你:http://lists.debian.org/debian-user/2006/04/msg00681.html 。不幸的是你的问题似乎是编译器的依赖。

该标准没有提及具体的尺寸要求,只是每个整体类型必须至少提供与之前类型相同的存储空间。所以int必须持有多达short,依此类推。你最好指定你所需要的。

如果要查找不会根据操作环境更改大小的整数,请查看Boost Integer Library或C99/C++ 11标头<cstdint>。这包含诸如uint32_t/int32_tuintmax_t/intmax_t的类型。

最重要的是,根据您的问题,它有:uintptr_t/intptr_t。这些保证有正确的大小以在您的平台上保持指针。

+0

`signed size_t`?也许你的意思是gcc的`ssize_t`? :) – avakar 2009-07-23 07:56:58

下的Visual Studio,你也提供__int3264这的确大致相同INT_PTR ...