c++ 中空类的大小和联合、结构和类之间的区别是啥?

Posted

技术标签:

【中文标题】c++ 中空类的大小和联合、结构和类之间的区别是啥?【英文标题】:what is size of empty class and difference between union, structure and class in c++ ?c++ 中空类的大小和联合、结构和类之间的区别是什么? 【发布时间】:2011-10-27 18:56:57 【问题描述】:

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

我的想法:

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

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

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

对吗?

谢谢

【问题讨论】:

澄清 pl0x - 相当模糊的问题 类型的大小不受静态数据成员存在的影响。 【参考方案1】:

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

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

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

要获得大小,只需对实例变量执行 sizeof() 即可。

【讨论】:

【参考方案2】:

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

用 Bjarne Stroustrup 的话来说,大小是非零的“保证两个不同对象的地址会不一样。”

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

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

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

【讨论】:

标准定义为大于0的任意大小 然后根据你的类名在符号表中生成一个唯一的地址,这就是为什么空类的大小为1。Then why size of empty struct is 0? @jhamb:空结构的大小为非零(通常为1)in C 以及in C++。您对语句“空的大小的参考是什么?结构是0" 我在某处读到这个,可能在 *** 的任何帖子中。感谢纠正我的错误概念。

以上是关于c++ 中空类的大小和联合、结构和类之间的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Swift中结构体和类的区别

java中接口和类之间是啥关系?

C/C++编程笔记:为什么在C++中空类的大小不为零?

mvc3生成视图中元素和类的结构是啥原因

C++中类和结构体的区别

Swift 结构体和类的区别