溫馨提示×

C++標準異常類的文檔說明

c++
小樊
81
2024-11-08 23:02:29
欄目: 編程語言

C++ 標準異常類位于 <exception> 頭文件中,它們是 C++ 異常處理機制的基礎。以下是 C++ 標準異常類的文檔說明:

1. std::exception

std::exception 是所有標準異常類的基類。它提供了一個虛函數(shù) what(),用于返回異常的描述信息。

class exception {
public:
    virtual ~exception() noexcept;
    virtual const char* what() const noexcept;
};

2. std::runtime_error

std::runtime_error 是一個派生自 std::exception 的異常類,用于表示運行時錯誤。

class runtime_error : public exception {
public:
    explicit runtime_error(const string& msg) : message(msg) {}
    const char* what() const noexcept override { return message.c_str(); }
private:
    string message;
};

3. std::logic_error

std::logic_error 是另一個派生自 std::exception 的異常類,用于表示邏輯錯誤。

class logic_error : public exception {
public:
    explicit logic_error(const string& msg) : message(msg) {}
    const char* what() const noexcept override { return message.c_str(); }
private:
    string message;
};

4. std::out_of_range

std::out_of_range 是一個派生自 std::runtime_error 的異常類,用于表示訪問容器時元素超出范圍的錯誤。

class out_of_range : public runtime_error {
public:
    explicit out_of_range(const string& msg) : runtime_error(msg) {}
};

5. std::bad_alloc

std::bad_alloc 是一個派生自 std::runtime_error 的異常類,用于表示內(nèi)存分配失敗的錯誤。

class bad_alloc : public runtime_error {
public:
    bad_alloc() : runtime_error("Memory allocation failed") {}
};

6. std::exception_ptr

std::exception_ptr 是一個指針類型,用于表示一個可能已經(jīng)拋出但未被捕獲的異常。它可以在異常處理程序之間傳遞異常。

class exception_ptr {
public:
    // 構(gòu)造函數(shù)和析構(gòu)函數(shù)
    // ...

    // 將異常指針轉(zhuǎn)換為 std::exception*
    operator std::exception*() const noexcept;

    // 從 std::exception* 轉(zhuǎn)換回 exception_ptr
    exception_ptr& operator=(std::exception* p) noexcept;

    // 重新拋出存儲的異常
    void rethrow() const;
};

7. 其他異常類

除了上述標準異常類外,C++ 標準庫還提供了許多其他異常類,如 std::domain_error、std::invalid_argument、std::length_error 等,它們都派生自 std::runtime_errorstd::logic_error

使用示例

以下是一個使用 C++ 標準異常類的示例:

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::runtime_error("An error occurred");
    } catch (const std::runtime_error& e) {
        std::cerr << "Caught exception: " << e.what() << std::endl;
    }
    return 0;
}

0