c+中空类的大小以及联合、结构和类之间的区别是什么+? 空类的大小和C++中的结构、类和类的区别?p>

c+中空类的大小以及联合、结构和类之间的区别是什么+? 空类的大小和C++中的结构、类和类的区别?p>,c++,class,struct,size,unions,C++,Class,Struct,Size,Unions,我的想法是: 若其中并没有静态成员,那个么它们应该是相同的,因为所有成员都是在堆栈上分配的 如果它们都是空的,那么它们是相同的 如果它们有静态成员,则取决于成员在其中的相对位置 对吧? 感谢C++标准规定空类的大小应非零 通常,在大多数系统中,它是1字节 用比亚恩·斯特劳斯特鲁普的话来说,大小是非零的“以确保两个不同对象的地址不同。” 在大多数系统上,大小为1,因为对齐规则并不重要,因为在符号表中输入类名只是为了获得唯一的地址 对于标准球迷: C++03标准第9节:类,第2段: 类类型的完整对象

我的想法是:

若其中并没有静态成员,那个么它们应该是相同的,因为所有成员都是在堆栈上分配的

如果它们都是空的,那么它们是相同的

如果它们有静态成员,则取决于成员在其中的相对位置

对吧?


感谢

C++标准规定空类的大小应非零
通常,在大多数系统中,它是
1
字节

用比亚恩·斯特劳斯特鲁普的话来说,大小是非零的“以确保两个不同对象的地址不同。”

在大多数系统上,大小为
1
,因为对齐规则并不重要,因为在符号表中输入类名只是为了获得唯一的地址

对于标准球迷:
C++03标准第9节:类,第2段:

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


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

静态成员(即变量或方法)不属于类/结构的一部分,因为它们不属于特定实例。因此,一个sizeof将不包括它们

union
既不是类也不是结构,union用于将结构映射到特定内存布局


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

澄清pl0x-非常模糊的问题类型的大小不受静态数据成员的影响。标准将其定义为大于0的任何大小,然后根据您的需要,在符号表中创建类名,以在唯一地址中创建,这就是为什么空类的大小是1
那么为什么空结构的大小是0?
@jhamb:空结构的大小也是非零的(通常是
1
)。对于“空结构的大小是
0
”这句话,你的参考是什么?我读到这篇文章的某个地方,可能在stackOverflow的任何帖子中。多亏纠正了我的错误观念。