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