gpt4 book ai didi

c++ - 将 dynamic_cast 与引用和指针一起使用时的行为差异

转载 作者:IT老高 更新时间:2023-10-28 12:29:36 28 4
gpt4 key购买 nike

我正在检查 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;
}

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

最佳答案

是的,这是正确的行为。原因是你可以有一个空指针,但不能有一个空引用——任何引用都必须绑定(bind)到一个对象。

因此,当指针类型的 dynamic_cast 失败时,它会返回一个空指针,调用者可以检查它,但是当它针对引用类型失败时,它不能返回空引用,因此异常是唯一合理的方法发出问题的信号。

关于c++ - 将 dynamic_cast 与引用和指针一起使用时的行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1276847/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com