C++標準庫定義了一些異常類型,如std::exception
,std::bad_alloc
和std::logic_error
。我們是否應該或允許在我們自己的代碼中使用它們?我們是否應該使用標準庫中的異常類型?
舉一個具體的例子。我們定義了一個類型Array
,其中保存固定數量的int
s並在「超出範圍」訪問權限上拋出std::out_of_range
。它有一個成員函數Array::operator[](size_t i)
,這是這樣的定義:
int& Array::operator[](size_t i) {
if (i >= size)
throw std::out_of_range({ "out of range" });
return array[i];
}
我想,當然,我們可以使用它們(標準並沒有真正禁止這樣做),但它看起來像繪製斷章取義。國際海事組織,它類似於一個恆定
const unsigned int percentFactor = 100;
它用於內存分配
:
char* ptr = new char[percentFactor];
percentFactor
是打算要爲了得到一個整數百分比結果與float
/double
成倍增加。如果它用於分配100 char
s,它會給出預期結果,但兩個LOC完全不相關。例外情況也是如此。如果std::out_of_range
僅用於標準庫中,並且我將在自己的代碼中使用它,那麼異常機制本身可以正常工作,但它不相關。
現在,我應該在我自己的程序/庫/ API中使用它們嗎?
我已經多次閱讀過這個問題,仍然不明白標準異常類與常量整數和動態內存分配有什麼關係。 –
@ChristianHackl'percentFactor'旨在乘以'float' /'double'以獲得整數百分比。在我的例子中,它用於內存分配,它完全**與百分比計算無關。想象一下,想要分配100個'char'並使用'percentFactor'。這給出了正確的結果,但實際上並不相關。與'std :: out_of_range'相同。如果它只是用於標準庫,但後來用於我自己的程序,它會工作,但它們完全不相關。誠然,它可能不是這個例子。 :-) – Downvoter
@ChristianHackl更好的例子:想象一下,如果執行「超出範圍」訪問,則拋出一個'std :: bad_alloc'。異常機制本身可能工作得很好,但std :: bad_alloc實際上與「超出範圍」訪問無關。 – Downvoter