对一个空类A来说,sizeof(A) =?
Class A
{}
Sizof(A) = 1; (VC)
对于空类,标准规定插入一个char;但其作为基类的时候,遵循最小化原则,大小为0.
所以:
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};
cout<<sizeof(X)<<endl;
cout<<sizeof(Y)<<endl;
cout<<sizeof(Z)<<endl;
cout<<sizeof(A)<<endl;
VC上的结果为1,4,4,8
如果修改为 class X{char a;};
VC的结果1,5,5,9;
如果修改为class X{char a;int b;};
VC的结果为8,12,12,16
我的理解是虚继承时子类需要维护一个Vptr的指针,所以即使虚基类为空,子类也会为vptr分配一个4字节(可能与各编译器有关)大小的空间。