我执行了下面的代码,其中A,B和C类的大小是1,这是有道理的,因为空类的大小是1.但D的大小是2.这怎么可能?
class A{};
class B : public A{};
class C : public A{};
class D : public B, public C{};
int main()
{
cout<<"Size of A is "<<sizeof(A)<<endl;
cout<<"Size of B is "<<sizeof(B)<<endl;
cout<<"Size of C is "<<sizeof(C)<<endl;
cout<<"Size of D is "<<sizeof(D)<<endl;
return 0;
}
输出 A的大小为1,B的大小为1,C的大小为1,D的大小为2
当我执行A类以下的代码大小为1(空类)B的大小为8时(由于虚拟继承,我们将有Vptr,因此大小为8),C的大小为1(空类)。但是为什么D的大小是16,尽管C实际上并没有被继承。
class A{};
class B : virtual public A{}; //Virtual Inheritance
class C : public A{}; //No Virtual Inheritance
class D : public B, public C{};
int main()
{
cout<<"Size of A is "<<sizeof(A)<<endl;
cout<<"Size of B is "<<sizeof(B)<<endl;
cout<<"Size of C is "<<sizeof(C)<<endl;
cout<<"Size of D is "<<sizeof(D)<<endl;
return 0;
}
输出 A的尺寸为1,B的尺寸为8,C的尺寸为1,D的尺寸为16
请帮我理解这一点。 提前致谢