c ++中空类的大小和union,structure和class之间的区别是什么?
我的想法:
如果其中没有静态成员,则它们应该相同,因为所有成员都在堆栈上分配。
如果它们都是空的,它们是相同的。
如果它们有静态成员,则取决于成员内部成员的相对位置。
对吗?感谢
答案 0 :(得分:2)
class == struct
唯一的区别是在结构中,默认情况下所有成员即ivars和方法都是公共的。
静态成员即变量或方法,在它们不属于特定实例的意义上不是类/结构的一部分。所以sizeof不包括它们。
union
不是类或结构,Union用于将结构映射到特定的内存布局。
获取大小只需执行sizeof()
实例变量,您将看到。
答案 1 :(得分:1)
C ++标准规范指出,空类的大小应为非零。
通常,在大多数系统上都是1
字节。
在Bjarne Stroustrup的话中,大小是非零“确保两个不同对象的地址不同。”
大多数系统的大小为1
,因为对齐规则无关紧要,因为类名的输入是在符号表中创建的,只是为了获得唯一的地址。
对于Standerdese粉丝:
C ++ 03标准第9节:类,第2段:
类类型的完整对象和成员子对象应具有非零大小。 94)