gpt4 book ai didi

c++ - 为什么在多重继承期间我不能 dynamic_cast "sideways"?

转载 作者:太空狗 更新时间:2023-10-29 23:42:22 25 4
gpt4 key购买 nike

以下代码抛出 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 如何进行性能权衡,因为“它遍历了完整的继承格”以便正确评估。编译器在这里需要做的是先向上转换,然后再向下转换。

是否可以完成上述工作或者我是否需要添加虚拟 Foo* Bar::as_foo()=0;

最佳答案

Foo 中没有虚函数,所以 dynamic_cast 完全不得不失败。需要有一个虚函数。在施工期间这样做也是一个坏主意,因为您会遇到施工顺序问题。

关于c++ - 为什么在多重继承期间我不能 dynamic_cast "sideways"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4641398/

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