c++ - 跨不同平台的基本类型的能力

标签 c++ types

我知道 sizeof(type) 会返回不同的值,具体取决于平台和编译器。

但是,我知道每当谈论 ints (int32) 时,都说它可以是 2^32 值之一。

如果我在 int32 为 8 字节的平台上,它的理论最大值为 2^64。它真的可以存储那么多数据,还是总是存储 4 个字节并使用 4 个字节进行填充?

真正的问题是,虽然我知道类型的大小会有所不同,但我想知道在各种平台上请求 max_int 是不变的还是会根据类型大小给我值。

尤其是在处理文件时。如果我将 int32 写入文件,它会始终存储 4 个字节,还是取决于它?

编辑: 考虑到所有评论以及我正在尝试创建与 C# BinaryReader 等效的事实,我认为使用固定大小类型是最佳选择,因为它将所有这些委托(delegate)给使用它的人(使其更灵活)。对吧?

最佳答案

std::int32_t 的大小始终为 32 位(通常为 4 字节)。

int 的大小可能会有所不同,具体取决于您编译的平台,但至少为 16 位(通常为 2 个字节)。

您可以在 C++ 中检查您的类型的最大值:

#include <limits>

std::numeric_limits<std::int32_t>::max()
std::numeric_limits<int>::max()

关于c++ - 跨不同平台的基本类型的能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43519233/

相关文章:

c++ - 在对象指针数组上调用函数

c++ - 用于 Linux 上 C++ 的带有 GUI 的调试器

c++ - 内联方法 : drawbacks

C++: STL: set: 存储值常量

c++ - 哈希表的复杂度计算错误?

c - 当我们声明双指针(**q)时int/char到底是什么

Javascript 字符串到数字类型强制

c - 从文件中读取 %le

javascript - 不能强制对象键为整数

c++ - 为什么无符号短(乘)无符号短转换为有符号整数?