C++整数类型自动64位

标签 c++ c++11

我在代码中使用 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_tintptr_t .它们通过 <cstdint> 从 C 标准库继承而来。 .

输入 size_t不能保证与指针具有相同的大小(在一般情况下它更小),这意味着它为此目的的可用性是特定于平台的。 (阅读:尽管它适用于任何地方,但它在概念上是错误的。)

当然,这里真正的问题是是否有充分的潜在理由将整数类型与地址宽度联系起来。如果没有,更好的办法是直接通过 uintNN_t 定义类型。/intNN_t typedefs 并忘记 size_t等等。

关于C++整数类型自动64位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39924053/

相关文章:

c++ - 'list::list' 命名构造函数,而不是类型

c++ - 为什么在这段代码中编译器选择 r-value ref 版本

c++ - 从 std::array 获取对原始数组的引用

c++ - 在 C++11 中实现 copy-and-swap 习惯用法的更好方法

c# - c#有没有类似c++的复制控制概念

c++ - 这个 C++ 模板声明真的不正确还是我的编译器搞砸了?

c++ - C++ 标准是否保证未使用的私有(private)字段会影响 sizeof?

c++11 - 为什么在C++ 11中按值传递的lambda参数是只读的?

c++ - std::atomic::load 的内存排序行为

c++ - C++ std::lock_guard作用域范围