6

What is the compatible "int" datatype in C++ that can resize itself to 4 bytes on 32bit & 8 bytes on 64bit windows?

Although INT_PTR works fine but it reduces the readability as well as its description tells us to use it for pointer arithmetic.

Thanks

4

5 回答 5

3

在 Visual Studio 下,您还可以使用 __int3264 与 INT_PTR ...

于 2009-07-23T07:43:51.150 回答
3

如果您正在寻找标准的东西,那您就不走运了。该标准没有指定任何内置数据类型的大小。

请注意,这INT_PTR并不意味着指针算术。我的意思是该类型将具有与 相同的大小void *,这正是您想要的。但它并不适用于所有平台(我很确定它是特定于 Windows 的)。

于 2009-07-23T07:30:24.140 回答
3

该标准没有提到具体的大小要求,只是每个整数类型必须提供至少与其之前的类型一样多的存储空间。所以int必须持有尽可能多的 a short,依此类推。你最好指定你需要它们做什么。

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

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

于 2009-07-23T07:32:46.943 回答
1

这真的取决于编译器。我认为唯一(或多或少)可靠的方法是使用像(void *)这样的指针类型。

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

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

(此示例适用于 Visual C++)

于 2009-07-23T07:31:52.187 回答
0

这可能会对您有所帮助:http: //lists.debian.org/debian-user/2006/04/msg00681.html。不幸的是,您的问题似乎与编译器有关。

于 2009-07-23T07:32:09.973 回答