gpt4 book ai didi

C++ vtable 解析虚拟继承

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:06 27 4
gpt4 key购买 nike

我对 C++ 和虚拟继承感到好奇 - 特别是解决 bass 类和子类之间的 vtable 冲突的方式。我不会假装理解它们如何工作的细节,但到目前为止我所看到的是它们是由于该分辨率而使用虚函数造成的一个小延迟。那么我的问题是基类是否为空 - 即它的虚函数定义为:

virtual void doStuff() = 0;

这是否意味着不需要解析,因为只有一组函数可供选择?

如果这是一个愚蠢的问题,请原谅我——正如我所说,我不明白 vtables 是如何工作的,所以我真的不知道更好。

编辑

所以如果我有一个带有两个独立子类的抽象类:

    A
/ \
/ \
B C

从子类调用函数时没有性能损失,相比之下,只是一个单一的无继承类?

最佳答案

在子类中调用非虚拟 函数没有命中。如果您像示例中那样调用纯虚函数的重写版本,那么虚拟惩罚可能仍然存在。一般来说,编译器很难优化虚拟表的使用,除非在非常特殊的情况下,在这种情况下它知道所讨论对象的确切按值类型(从上下文)。

但是真的不用担心开销。它会非常小,以至于在实践中您几乎肯定不会遇到它是导致性能瓶颈的代码部分的情况。在对您的设计有意义的地方使用虚函数,不用担心(微小的)性能损失。

关于C++ vtable 解析虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3070290/

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