簡體   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