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