c++ int32在所有平台上的大小都相同吗?

aor9mmx1  于 2023-06-25  发布在  其他
关注(0)|答案(4)|浏览(144)

我正在开发一个多平台应用程序(iOS,Android等),使用C++。
在C++标准中是否有基类型保证是固定宽度的,并且可以跨多个平台移植?
我正在寻找固定宽度的类型,如Int32,UInt32,Int16,UInt16,Float32等。

ekqde3dh

ekqde3dh1#

int32是自定义typedef,默认情况下只有int存在。如果需要指定宽度,请查看stdint.h

  1. #include <cstdint>
  2. int32_t integer32bits;

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

3ks5zfa0

3ks5zfa02#

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

wkyowqbh

wkyowqbh3#

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

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

参见The difference of int8_t, int_least8_t and int_fast8_t
请注意,不同的系统也可能具有不同的字节序,因此在网络上传输这些字节序永远都是不安全的。

2q5ifsrm

2q5ifsrm4#

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。

相关问题