是保证字符以外的任何类型的大小
Is sizeof any type other than char guaranteed?
我知道在C++中,sizeof(char)
保证为1,但这是唯一的情况吗?或者有其他内置类型保证具有精确的大小吗?
特别是sizeof(bool) == 1
或sizeof(int) == 4
是语言要求的,还是实现细节?
仅明确保证char
:sizeof(char) == 1
的大小。隐含地,该保证也适用于signed char
和unsigned char
,因为它们中的一个被要求使用与char
相同的表示,而另一个被signed char
和unsigned char
之间的转换规则约束以使用相同的大小。
除此之外,如果某些类型中存在位,则仅对数量和某些类型之间的大小关系有保证。注意,char
可以具有等于或大于8的任意数量的比特。
规则足够严格,signed char
和unsigned char
的大小也必须为1。
没有其他类型的大小是有保证的——我知道编译器会使sizeof(bool)
的值大于1,使sizeof(int)
的值大于4。
类型不一定保证在不同的体系结构中始终具有相同的字节大小。sizeof(X)实际上是由编译器实现的,并输出一个整数(1,2,4,8等),因此不是函数调用。因此,给定类型(例如int)的输出将取决于编译应用程序的系统。这就是为什么您必须为不同的体系结构重新编译应用程序的原因。
也就是说,有些类型总是一个特定的大小(例如int32)。
请参阅:C++标准规定int、long类型的大小是多少?
理论上,(旧C++)实现(但可能不是C++11)可能具有sizeof
,每个标量类型(数值、指针、布尔值)都是1。但我无法命名这样的实现(其中sizeof(int)
、sizeof(double)
、sizeof(long long)
、sizeof(bool)
、sizeof(void*)
都是1)。
如果您关心数据类型大小,则可能应该使用<cstdint>
标头。
此外,代码的可移植性可能很棘手。您不仅应该关心积分数据类型大小,还应该关心字节序和操作系统问题(POSIX等标准应该会有所帮助)。一句格言说,没有可移植的软件,只有经过痛苦移植的代码。
- C++ 将 CIN 值存储到任何类型的数组中
- 对任何类型的元素数组进行排序
- 任何种类的分数 在任何类型的订单中
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 检查模板中 nullptr 的函数指针,了解任何类型的可调用对象
- 如何制作可以接受任何类型的参数的 std::函数和 lambda
- 为自定义打印调试实现传递任何类型的变量
- 我的代码中是否有任何类型的错误,因为它没有给出正确的输出
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- C++如何使虚拟函数返回任何类型的指针
- 任何类型的缓存机制
- 如何在C++中接收任何类型的函数参数并获取函数内传递变量的类型?
- 如何在C++变量中存储任何类型的函数
- 将任何类型的表达式放在 c++ 的初始化列表中在语法上是否正确?
- 第一次捕获捕获任何类型的
- C++包含任何类型的模板类对象的映射
- 接受对任何类型的可变引用的 Lambda
- 将任何类型转换为任何类型