对于C++中的一个空类
class X
{
};
事实上并不是空的,sizeof(X)并不等于0, 一般的结果是1。每个X的对象都有一个隐晦的1bytes,是被编译器安插进去的一个char,这样可以使得这个class的两个objects在内存中配置独一无二的地址。
当X作为另一个类的成员时,如:
class A
{
本文探讨了C++中的一个现象,即空类在实际占用空间中通常不为0,而是1个字节。这与编译器为了确保对象唯一性而插入的额外字节有关。当空类作为其他类的基类时,一些编译器会进行空白基类最优化(EBO或EBCO),在子类中消除基类占用的空间。然而,EBO不是C++标准强制要求的,且不适用于多重继承。通过EBO,可以提高对象布局的效率,并在STL等实现中发挥关键作用。文章通过代码示例展示了EBO的影响,并指出其优化效果在继承链中不会传递。
对于C++中的一个空类
class X
{
};
事实上并不是空的,sizeof(X)并不等于0, 一般的结果是1。每个X的对象都有一个隐晦的1bytes,是被编译器安插进去的一个char,这样可以使得这个class的两个objects在内存中配置独一无二的地址。
当X作为另一个类的成员时,如:
class A
{
188
1145
2605
727

被折叠的 条评论
为什么被折叠?