gpt4 book ai didi

c++ - 具有菱形继承结构的子类的大小似乎很奇怪

转载 作者:太空狗 更新时间:2023-10-29 20:50:08 24 4
gpt4 key购买 nike

我有 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?
}

最佳答案

D 中有 2 个 A 子对象,它们必须具有不同的表示形式。 sizeof(D)下界因此是1 + sizeof(int)

您使用的实现选择了 D 的大小,使得 (sizeof(D) % alignof(D)) == 0

在完全空的情况下,您的实现不符合要求,因为它将两个不同的 A 放在同一存储中。

关于c++ - 具有菱形继承结构的子类的大小似乎很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56375169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com