繁体   English   中英

std::bad_cast vs NULL,有什么区别?

[英]std::bad_cast vs NULL, what's the difference?

为什么当它失败时返回Null时我们需要std::bad_cast bad_cast ?

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

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

因为你不能有 null 参考。 dynamic_cast<T*>可以将nullptr作为失败返回,但dynamic_cast<T&>不能,因为您返回的是对 object 的引用。 对于这种情况,您需要一个例外来知道强制转换失败。

转换引用时抛出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提供了一种机制来知道强制转换失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM