我在代码中使用 size_t
作为无符号整数。它有一个优点,如果我的电脑支持 64 位,size_t
将是 unsigned long long int
,否则,它是 unsigned int
。我的代码可以在 32 位和 64 位平台上运行。
是否有类似的有符号整数?如果平台只支持32位,则为int
,如果平台支持64位,则为long long int
。
我可以通过设置一个标志来实现:
#ifdef USE_INT64
#define MY_INT int
#else
#define MY_INT long long int
#endif
然后使用MY_INT
。但是,我需要定义 USE_INT64
并为我的所有代码包含此 header 。如果有类似size_t
的东西就好了。
最佳答案
如果您想将您的类型直接与地址宽度联系起来,那么您正在寻找的类型称为 uintptr_t
和 intptr_t
.它们通过 <cstdint>
从 C 标准库继承而来。 .
输入 size_t
不能保证与指针具有相同的大小(在一般情况下它更小),这意味着它为此目的的可用性是特定于平台的。 (阅读:尽管它适用于任何地方,但它在概念上是错误的。)
当然,这里真正的问题是是否有充分的潜在理由将整数类型与地址宽度联系起来。如果没有,更好的办法是直接通过 uintNN_t
定义类型。/intNN_t
typedefs 并忘记 size_t
等等。
关于C++整数类型自动64位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39924053/