int32在所有平台上的大小是否相同?
Will int32 be the same size on all platforms?
我正在开发一个多平台应用程序(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。
- 如何判断类型双关语在我的平台上是否可以?
- 是否有任何 2 补充平台/编译器,其中有符号移位不做通常的事情?
- 是否有缺少固定宽度类型(intXX_t)的平台
- 不同平台的 fstream 系列实现是否不同?
- STL 库在不同平台上是否不同?
- 从浮点型到 int 的转换在所有平台和处理器架构中是否一致?
- C++ WinRT - XAudio2是否支持Xbox One平台
- 如果给定正确的运行时库,x86 可执行文件是否可以在任何 x86 平台上运行
- "std::this_thread::sleep_for()"是否有特定于平台的限制
- 在x86_64平台上是否需要 rdtsc 的 mfence?
- 在 MSVC 中将某些库的目标平台版本设置为 10.x 是否使程序与在 Windows Vista/7/8 上运行不兼容
- C/C 中POW()函数的实现是否随平台或编译器而变化
- 在目标平台上编译 Boost 自己是否有意义
- VS2010在不同平台上生成的可执行文件是否应该有所不同
- 假设所有Windows平台都在UCS-2 LE中是否安全
- 尚未操作的 32 位规范化浮点数在任何平台/编译器上是否相同?
- 是否可以在所有平台上使用vs2010 c++和Qt
- 是否有一个平台不将 std::time_t 表示为 unix 时间
- pclose() 返回管道的终止状态是否在所有平台上都向左移动了 8 位?
- 是否可以创建一个可以在ios移动平台和windows桌面平台之间运行的应用程序,而无需使用web界面