sizeof除了char以外的任何类型都有保证吗?

时间:2015-02-14 20:48:32

标签: c++

我知道在C ++中sizeof(char)保证为1,但它是唯一的情况还是有其他内置类型保证具有确切的大小?

特别是语言要求sizeof(bool) == 1sizeof(int) == 4还是实施细节?

4 个答案:

答案 0 :(得分:6)

只有char明确保证大小:sizeof(char) == 1。隐式此保证也适用于signed charunsigned char,因为其中一个要求使用与char相同的表示形式,另一个则受signed charunsigned char之间转换规则的约束。 char使用相同的尺寸。

除此之外,如果某些类型的位和某些类型之间的大小关系存在,则只保证数字。注意,{{1}}可以具有等于或大于8的任何位数。

答案 1 :(得分:3)

规则非常严格,signed charunsigned 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之类的标准应该有帮助)。一句格言说,没有可移植的软件,只有代码已被痛苦地移植