即使没有继承,dynamic_cast也能工作吗?

时间:2020-08-28 09:07:41

标签: c++ c++11

std :: bad_cast:https://en.cppreference.com/w/cpp/types/bad_cast

当dynamic_cast到引用类型的运行时检查失败(例如,由于类型与继承无关)时,将引发此类型的异常

因此,如果类型不是通过继承关联的,那么它将引发错误,那么下面的引号如何成立?

https://stackoverflow.com/a/332086/462608

您不仅可以向下投射,还可以使用它-您可以侧向投射,甚至向上投射另一个链

这句话是什么意思?请举例。

1 个答案:

答案 0 :(得分:3)

例如,侧面路投:

class Base1 { virtual ~Base1() = default; };
class Base2 { virtual ~Base2() = default; };
class Derived: public Base1, public Base2 {};

int main() {
    Base1* p1 = new Derived;
    Base2* p2 = dynamic_cast<Base2*>(p1);
}

类型Base1Base2彼此无关,但是您可以在指针之间进行强制转换,因为Derived继承自两者。

我不确定原始应答程序是什么意思““铸造另一个链条””,但是我想这意味着您将拥有一个Base1*指针并将其转换为{ {1}}父级。