int32在所有平台上的大小是否相同?

Will int32 be the same size on all platforms?

本文关键字:是否 平台 int32      更新时间:2023-10-16

我正在开发一个多平台应用程序(iOS, Android等),使用c++。

c++标准中是否存在保证固定宽度并可跨多个平台移植的基本类型?

我正在寻找固定宽度类型,如Int32, UInt32, Int16, UInt16, Float32等

int32为自定义类型,默认只存在int。如果您需要指定宽度,请查看stdint.h

#include <cstdint>
int32_t integer32bits;

我不认为标准中存在任何对应的浮点数,如果我错了请纠正我

浮点数几乎都是32位的,除了一些不符合IEEE 754的模糊平台。你很可能不需要为这些烦恼。整数类型可能会有所不同,但是如果您的目标平台具有兼容c++ 11的编译器,那么您可以使用cstdint头以标准方式访问特定大小的类型。如果不能使用c++ 11,那么很可能需要为每个平台分别编写代码。

<stdint.h><cstdint>中的定义可用于可移植性:

  • int32_t保证是有符号32位类型的类型定义,或者根本不存在。由于这是c++,您可以使用enable_if来决定操作过程。
  • int_least32_t是至少32位的最小类型的类型定义
  • int_fast32_t是一个类型定义,至少有32位,可以有效地操作(例如,如果内存总线是64位宽,不允许部分存储,使用64位类型和浪费内存比执行读-修改-写访问更快)

参见int8_t、int_least8_t和int_fast8_t的区别

请注意,不同的系统也可以有不同的端序,因此在网络上传输这些端序是不安全的。

c++没有这样的类型int32,所以我假设您指的是int32_t。为了澄清一些术语,width通常是指类型宽度的位数,而size是指类型宽度的字节数或字符数。

是的,根据定义,int32_t在支持它的所有平台上都需要具有相同的宽度,即宽度的位数。正好32位宽。请记住,该类型是可选的,可能根本没有定义,当且仅当系统没有这样的类型,例如,如果32不是CHAR_BIT的倍数。

但是它们的大小的字节(由sizeof()运算符返回)取决于CHAR_BIT的值。也就是一个字节中的位数。在大多数系统上,一个字节是8位,因此sizeof(int32_t)将产生4位。但是在具有16位字节的特殊系统上,sizeof(int32_t)将仅为2。