其他分享
首页 > 其他分享> > c – 为什么我不能在多重继承期间“侧向”动态广播?

c – 为什么我不能在多重继承期间“侧向”动态广播?

作者:互联网

以下代码抛出std :: bad_cast

struct Foo {
    void foo () {}
};

struct Bar {
    Bar () {
        dynamic_cast <Foo &> (*this) .foo ();
    }
    virtual ~ Bar () {}
};

struct Baz : public Foo, public Bar {
};

int main ()
{
    Baz b;
}

我记得曾经读过dynamic_cast如何进行实现性能权衡,因为“它遍历了完整的继承格”以便正确评估.编译器在这里需要做的是先强制然后再次向下.

可以进行上述工作还是我需要添加
virtual Foo * Bar :: as_foo()= 0;

解决方法:

Foo中没有虚函数,因此dynamic_cast非常有必要失败.需要有一个虚拟功能.在施工期间这样做也是一个坏主意,因为您将遇到施工订单问题.

标签:object-lifetime,dynamic-cast,c,constructor,inheritance
来源: https://codeday.me/bug/20190928/1825656.html