什么是空类的大小和c ++中的union,structure和class之间的区别?

时间:2011-10-27 18:56:58

标签: c++ class struct size unions

c ++中空类的大小和union,structure和class之间的区别是什么?

我的想法:

如果其中没有静态成员,则它们应该相同,因为所有成员都在堆栈上分配。

如果它们都是空的,它们是相同的。

如果它们有静态成员,则取决于成员内部成员的相对位置。

对吗?

感谢

2 个答案:

答案 0 :(得分:2)

class == struct唯一的区别是在结构中,默认情况下所有成员即ivars和方法都是公共的。

静态成员即变量或方法,在它们不属于特定实例的意义上不是类/结构的一部分。所以sizeof不包括它们。

union不是类或结构,Union用于将结构映射到特定的内存布局。

获取大小只需执行sizeof()实例变量,您将看到。

答案 1 :(得分:1)

C ++标准规范指出,空类的大小应为非零
通常,在大多数系统上都是1字节。

在Bjarne Stroustrup的话中,大小是非零“确保两个不同对象的地址不同。”

大多数系统的大小为1,因为对齐规则无关紧要,因为类名的输入是在符号表中创建的,只是为了获得唯一的地址。

对于Standerdese粉丝:
C ++ 03标准第9节:类,第2段:

  

类类型的完整对象和成员子对象应具有非零大小。   94)