首頁  >  文章  >  後端開發  >  C++ 函式異常處理中的異常層級如何劃分?

C++ 函式異常處理中的異常層級如何劃分?

WBOY
WBOY原創
2024-04-15 18:48:021078瀏覽

C 中異常層級提供了不同的異常類別繼承層次,用於對異常情況進行分類。此層級由 std::exception 類別為根,包括基礎異常、執行時期異常和邏輯異常,更具體的異常類別從這些基底類別派生。透過異常處理機制,可以捕獲不同層級的異常並根據需要採取相應措施。

C++ 函数异常处理中的异常层级如何划分?

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:: exception):表示所有異常情況的基底類別。
  • 執行階段異常 (std::runtime_error):表示在程式執行時發生的異常,例如記憶體分配失敗或檔案開啟失敗。
  • 邏輯例外 (std::logic_error):表示程式邏輯中的錯誤,例如非法參數或無效狀態。

更具體的例外類別從std::runtime_errorstd::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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多