dynamic_cast强制转换为指向不在层次结构中的类的指针

dynamic_cast casting to pointer to class not in hierarchy

本文关键字:层次结构 指针 cast 转换 dynamic      更新时间:2023-10-16

我正在处理项目,在做dynamic_cast时我错误地输入了不同的类名,它的工作没有抛出任何异常,并且在不同的模块中发生了问题。简而言之,我们有一个类层次结构,其中 B 类派生自基类 A,并且两者都具有虚函数。有具有虚函数的单独基类 C。现在,在指向 C 的指针上执行dynamic_cast时,我错误地键入了 A,如下面的代码所示,它起作用了。

我的问题是为什么dynamic_cast现在在这种情况下抛出异常,因为它应该抛出异常,因为我试图将输入指针投射到完全不同的类指针。我在这里也运行了它 http://ideone.com/Fpb3t1 也没有抛出任何例外。

#include <iostream>
using namespace std;
class A
{
    public:
        virtual void method() {;}
};
class B : public A
{
};
class C
{
    public:
        virtual void no(int arg) {;}
};
int main()
{
    C obj;
    A* ptr = NULL;
    try
    {
        C *cptr = &obj;
        ptr = dynamic_cast<A*> (cptr);
    }
    catch (...)
    {
        std::cout << std::endl << "NO EXCEPTION" << std::endl;
    }
    return 0;
}

谢谢

指针

上的失败dynamic_cast返回nullptr,它不会抛出。有关更多详细信息,请参阅此处。