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++ 中空类的大小和联合、结构和类之间的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章