#include <iostream>
using namespace std;
struct A
{
virtual void foo() { }
};
struct B1 :A
{
};
int main()
{
int x = 42;
A *a = (A*)&x;
try
{
B1 *b = dynamic_cast<B1*>(a);
}
catch (...)
{
cout << "what kind of exception is here now?";
}
return 0;
}
我抓到了什么类型的例外?
我还可以在括号内写下什么:catch(...)以捕获此异常?
答案 0 :(得分:2)
指针类型之间的dynamic_cast
永远不会抛出,它只会返回nullptr
。如果您想要dynamic_cast
投掷,请在引用类型之间进行转换。例外情况为std::bad_cast
类型。
来自http://en.cppreference.com/w/cpp/language/dynamic_cast:
如果转换失败并且new_type是指针类型,则返回该类型的空指针。如果转换失败并且new_type是引用类型,则抛出与std :: bad_cast类型的处理程序匹配的异常。