gpt4 book ai didi

c++ - 在多级继承中派生的虚拟基类会发生什么?

转载 作者:行者123 更新时间:2023-11-30 01:24:17 24 4
gpt4 key购买 nike

在玩继承时,我碰巧尝试了这个:

class A
{ int i; };

class B : virtual public A
{ int j; };

class C : public B
{ int k; };

int main()
{
std::cout<<sizeof(C)/sizeof(int);
return 0;
}

这给了我输出 6

虽然以下内容按预期工作,但输出 3

class A
{ int i; };

class B : public A // No virtual here
{ int j; };

class C : public B
{ int k; };

int main()
{
std::cout<<sizeof(C)/sizeof(int);
return 0;
}

为什么会有这种差异?而且,为什么它是第二种情况的两倍?

最佳答案

依赖于实现

然而,几乎所有的编译器都会使用相同的机制,只要你有一个 virtual 关键字,编译器就需要通过 vptrvtables< 做一些额外的簿记工作。这种额外的簿记增加了类(class)人数。

严格来说,您应该依赖任何特定的大小,这就是为什么标准提供 sizeof 来获取实际大小而不是猜测它的原因。

关于c++ - 在多级继承中派生的虚拟基类会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13776780/

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