我有4个班级A,B,C,D。 B和C继承A,D继承B和C。
如果A,B,C,D没有任何成员变量,则sizeof(D)
返回1(这是预期的)。
但是,当B具有一个整数作为成员变量时,sizeof(D)
突然变为8。
由于sizeof(int)
是4,sizeof(D)
是否也应该返回4?
class A
{
};
class B : public A
{
int data;
};
class C : public A
{
};
class D : public B, public C
{
};
int main()
{
sizeof(A); // 1
sizeof(B); // 4
sizeof(C); // 1
sizeof(D); // 8?
}
答案 0 :(得分:3)
您在A
中有2个D
子对象,它们必须具有不同的表示形式。因此,sizeof(D)
上的下界为1 + sizeof(int)
。
您使用的实现选择了D
的大小为(sizeof(D) % alignof(D)) == 0
。
您的实现在完全空的情况下是不合格的,因为它已将两个不同的A
放在同一存储中。