相关疑难解决方法(0)

使用带有引用和指针的dynamic_cast时的行为差异

我正在检查dynamic_cast的行为,发现当它失败时,仅当目标是引用类型时才抛出std :: bad_cast异常.如果目标是指针类型,则不会从强制转换中抛出异常.这是我的示例代码:

class A
{
    public:
        virtual ~A()
        {
        }
};

class B : public A
{
};

int  main()
{
    A* p = new A;

    //Using reference
    try
    {
    B& b = dynamic_cast<B&>(*p);
    }
    catch(std::bad_cast exp)
    {
    std::cout<<"Caught bad cast\n";
    }

    //Using pointer
      try
    {
    B* pB = dynamic_cast<B*>(p);

    if( pB == NULL)
    {
        std::cout<<"NULL Pointer\n";
    }
    }
    catch(std::bad_cast exp)
    {
    std::cout<<"Caught bad cast\n";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是"Caught bad cast"和"NULL pointer".代码使用VS2008编译.这是正确的行为吗?如果是,那为什么会有区别?

c++ dynamic-cast casting

39
推荐指数
4
解决办法
3万
查看次数

标签 统计

c++ ×1

casting ×1

dynamic-cast ×1