在真正不需要或不使用虚拟继承时,虚拟继承会产生成本吗?

无效指针

如果我执行以下操作:

class Derived : public virtual Base {};

但是Base对于同一个后代来说,绝不会发生两次,那还需要付出代价吗?换句话说,简单地添加关键字是否会为的Base和的子类之间的任何虚函数调用引入额外的间接级别Derived还是Base从触发它的后代类的角度来看,是出现两次还是多次?

措辞有点难...我希望我的问题是有道理的。

恶魔

如果Derived是,final则编译器可以取消继承Base然而,也不能保证它和平台ABI可以防止其这样做。

如果Derived不是final,则编译器必须预期aDerived可能是具有另一个对象的完整对象的子对象Base

class MoreDerived : public virtual Base, public Derived {};

编译器还可能能够devirtualize继承DerivedBase链接时优化期间,如果它可以观察到,Derived从来不是一种子对象; 但同样,不能保证会这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

虚拟继承会增加开销吗

来自分类Dev

虚拟继承会增加开销吗

来自分类Dev

当基类不包含数据成员时,仍然需要虚拟继承吗?

来自分类Dev

虚拟/非虚拟继承

来自分类Dev

使用libsodium-net时,不需要生成和存储盐吗?

来自分类Dev

我们可以在钻石继承模式中仅使用一种虚拟继承吗?

来自分类Dev

在haskell中使用foldl时不需要参数吗?

来自分类Dev

继承类不需要在Java父类型

来自分类Dev

虚拟方法继承类

来自分类Dev

虚拟继承问题

来自分类Dev

多重继承/虚拟功能

来自分类Dev

const和虚拟继承

来自分类Dev

C ++虚拟继承差异

来自分类Dev

避免C ++虚拟继承

来自分类Dev

C ++虚拟钻石继承

来自分类Dev

少继承“虚拟”类

来自分类Dev

虚拟方法继承类

来自分类Dev

虚拟继承模糊功能

来自分类Dev

使用 xpath 提取值会产生一些不需要的字符串

来自分类Dev

在不使用虚拟析构函数的情况下删除继承的对象时中止

来自分类Dev

虚拟继承是否会强制基类默认可构造?

来自分类Dev

我是否需要使用继承的对象(相对于基础对象)覆盖虚拟函数?

来自分类Dev

虚拟继承中的重载虚拟函数

来自分类Dev

关于多重继承和虚拟继承

来自分类Dev

没有虚拟继承的多重继承

来自分类Dev

具有构造函数继承的虚拟继承

来自分类Dev

当不需要AccountAuthenticator时使用SyncAdapter

来自分类Dev

无法从具有虚拟继承的类派生(C ++虚拟继承)

来自分类Dev

使用单表继承时,Doctrine无法生成模式吗?