dynamic_cast指针异常捕获

时间:2017-05-26 20:57:33

标签: c++ exception try-catch dynamic-cast

#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(...)以捕获此异常?

1 个答案:

答案 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类型的处理程序匹配的异常。