C++ 標準異常類位于 <exception>
頭文件中,它們是 C++ 異常處理機制的基礎。以下是 C++ 標準異常類的文檔說明:
std::exception
std::exception
是所有標準異常類的基類。它提供了一個虛函數 what()
,用于返回異常的描述信息。
class exception {
public:
virtual ~exception() noexcept;
virtual const char* what() const noexcept;
};
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;
};
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;
};
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) {}
};
std::bad_alloc
std::bad_alloc
是一個派生自 std::runtime_error
的異常類,用于表示內存分配失敗的錯誤。
class bad_alloc : public runtime_error {
public:
bad_alloc() : runtime_error("Memory allocation failed") {}
};
std::exception_ptr
std::exception_ptr
是一個指針類型,用于表示一個可能已經拋出但未被捕獲的異常。它可以在異常處理程序之間傳遞異常。
class exception_ptr {
public:
// 構造函數和析構函數
// ...
// 將異常指針轉換為 std::exception*
operator std::exception*() const noexcept;
// 從 std::exception* 轉換回 exception_ptr
exception_ptr& operator=(std::exception* p) noexcept;
// 重新拋出存儲的異常
void rethrow() const;
};
除了上述標準異常類外,C++ 標準庫還提供了許多其他異常類,如 std::domain_error
、std::invalid_argument
、std::length_error
等,它們都派生自 std::runtime_error
或 std::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;
}