我知道在C ++中sizeof(char)
保证为1,但它是唯一的情况还是有其他内置类型保证具有确切的大小?
特别是语言要求sizeof(bool) == 1
或sizeof(int) == 4
还是实施细节?
答案 0 :(得分:6)
只有char
明确保证大小:sizeof(char) == 1
。隐式此保证也适用于signed char
和unsigned char
,因为其中一个要求使用与char
相同的表示形式,另一个则受signed char
和unsigned char
之间转换规则的约束。 char
使用相同的尺寸。
除此之外,如果某些类型的位和某些类型之间的大小关系存在,则只保证数字。注意,{{1}}可以具有等于或大于8的任何位数。
答案 1 :(得分:3)
规则非常严格,signed char
和unsigned char
的大小也必须为1.
没有其他类型可以保证大小 - 我知道编译器会使sizeof(bool)
的值大于1,并使sizeof(int)
的值不是4。
答案 2 :(得分:2)
不一定要保证类型在体系结构中始终具有相同的字节大小。 sizeof(X)实际上是由编译器实现的,并输出一个整数(1,2,4,8等),因此不是函数调用。因此,给定类型(例如int)的输出将取决于编译应用程序的系统。这就是您必须为不同的体系结构重新编译应用程序的原因。
也就是说,某些类型总是特定的大小(例如int32)。
请参阅:What does the C++ standard state the size of int, long type to be?
答案 3 :(得分:2)
理论上,(旧的C ++)实现(但可能不是C ++ 11)可能sizeof
每个标量类型(数字,指针,布尔)都是1.但是我不能命名这样的实现(其中sizeof(int)
,sizeof(double)
,sizeof(long long)
,sizeof(bool)
,sizeof(void*)
都是1)。
如果您关心数据类型大小,可能应该使用<cstdint>
标题。
此外,代码portability可能很棘手。您不仅要关注整数数据类型大小,还要关注endianess和操作系统问题(POSIX之类的标准应该有帮助)。一句格言说,没有可移植的软件,只有代码已被痛苦地移植。