dynamic_cast强制转换为不在层次结构

时间:2017-05-17 13:38:59

标签: c++ pointers

我正在研究项目,其中错误地我在执行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;
}

由于

1 个答案:

答案 0 :(得分:2)

指针上的失败dynamic_cast返回nullptr,它不会抛出。有关详细信息,请参阅here