我在代码中使用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
并为我的所有代码包含此标头。如果有类似于size_t
的内容,那就太棒了。
答案 0 :(得分:4)
如果您想将类型直接绑定到地址宽度,那么您要查找的类型称为uintptr_t
和intptr_t
。它们通过<cstdint>
从C标准库继承。
类型size_t
不能保证与指针大小相同(一般情况下它更小),这意味着它的可用性是特定于平台的。 (阅读:即使它可以在任何地方使用,但在概念上也是错误的。)
当然,这里真正的问题是将整数类型与地址宽度联系起来是否有一个很好的潜在原因。如果没有,更好的想法是直接通过uintNN_t
/ intNN_t
typedef定义您的类型,而忘记size_t
等等。
答案 1 :(得分:1)
有一个相应的签名类型ptrdiff_t
,它被定义用于获取两个指针之间的差异。它应该与指针大小相同,就像size_t
一样。
答案 2 :(得分:0)
您可以使用std::make_signed
获取与std::size_t
无符号的完全相同的模拟符号:
using fancy_signed = std::make_signed<std::size_t>::type;