提问者:小点点

std::bad_cast和NULL有什么区别?


为什么当它失败时返回null时,我们需要std::BAD_CAST

我了解到当dynamic_cast失败时,它返回null,因此我可以检查是否返回了null,这意味着发生了错误。

但是为什么在C++中添加std::bad_cast异常呢?


共2个答案

匿名用户

因为不能有空引用。 dynamic_cast可以将nullptr作为失败返回,但dynamic_cast不能,因为您返回的是对对象的引用。 对于这种情况,您需要一个异常来知道强制转换失败。

匿名用户

std::bad_cast在强制转换引用时引发

对于指针强制转换,正如您提到的,您可以使用dynamic_cast

Base* b = dynamic_cast<Base*>(a);  // could return nullptr

使用引用时,不能将nullptr赋值

try
{
    Base& b = dynamic_cast<Base&>(a);
} 
catch(const std::bad_cast& e)
{
    std::cout << e.what() << '\n';
}

所以std::bad_cast提供了一种机制来知道强制转换失败。