簡體   English   中英

出於自己的目的使用標准的 std::exception 子類是標准做法嗎?

[英]Is it standard practice to use standard std::exception subclasses for your own purposes?

如果我有這樣的代碼:

std::vector<foo> bar;
...fill up bar...
if (bar.size() < 5)
{
    throw std::out_of_range("Not enough foos in the bar");
}

標准是否允許並期望這樣的重用,還是不贊成?

不是為了它們自己的目的,但是如果您想按照最初的意圖使用它們,那很好。

你舉的例子可能是一個合理利用std::out_of_range但投擲std::bad_weak_ptr例如是不恰當的。 `std::out_of_range的參考說明:

報告由於嘗試訪問超出定義范圍的元素而導致的錯誤。

因此,如果您即將訪問bar[5]則例外是合適的。

最終重要的是,如果您正在制作一個庫,您應該記錄您拋出哪些異常以及原因。

簡短的回答:是的。

更長的答案:你可以隨意拋出一些不是從std::exception派生的東西,但這使得人們很難編寫通用的catch子句(除了catch(...) )並打印出關於異常的任何有意義的信息( .what()部分)。

找到最能描述您將要拋出的內容並使用它的標准異常。 您也可以繼承它以創建自己的例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM