C 中異常層級提供了不同的異常類別繼承層次,用於對異常情況進行分類。此層級由 std::exception 類別為根,包括基礎異常、執行時期異常和邏輯異常,更具體的異常類別從這些基底類別派生。透過異常處理機制,可以捕獲不同層級的異常並根據需要採取相應措施。
C 函數例外處理中的例外層級
在C 中,函數例外處理可以透過拋出例外物件來報告異常情況。為了對不同的異常情況進行分類,C 引入了異常層級。異常層級是一個由標準函式庫定義的異常類別繼承層次結構,它為異常物件提供了不同的資訊層級。
1. 異常類別繼承層次結構
異常層級是以std::exception
類別為根的繼承層次結構:
class std::exception { public: virtual ~exception() noexcept = default; virtual const char* what() const noexcept = 0; }; // 基本异常类 class std::runtime_error : public std::exception { public: runtime_error(const char* whatArg) : whatArg_(whatArg) {} virtual const char* what() const noexcept override { return whatArg_; } private: const char* whatArg_; }; // 派生异常类 class std::logic_error : public std::runtime_error { public: logic_error(const char* whatArg) : runtime_error(whatArg) {} };
2. 異常層級分割
異常層級將例外類別分為不同的層級:
更具體的例外類別從std::runtime_error
和std::logic_error
衍生,例如:
std::bad_alloc
:記憶體分配失敗。 std::invalid_argument
:無效參數。 std::range_error
:範圍錯誤(例如,陣列下標越界)。 3. 實戰案例
考慮下列函數:
int divide(int numerator, int denominator) { if (denominator == 0) { throw std::invalid_argument("denominator cannot be zero"); } return numerator / denominator; }
當denominator
為0 時,此函數拋出std::invalid_argument
例外。此異常屬於 std::logic_error
層級,表示程式邏輯中一個無效的參數錯誤。
在呼叫divide
函數時,你可以使用異常處理機制來捕獲異常:
try { int result = divide(10, 2); std::cout << "Result: " << result << std::endl; } catch (const std::invalid_argument& e) { std::cerr << "Error: " << e.what() << std::endl; }
在這種情況下,當denominator
為0 時,將捕獲std::invalid_argument
異常並列印錯誤訊息。
以上是C++ 函式異常處理中的異常層級如何劃分?的詳細內容。更多資訊請關注PHP中文網其他相關文章!