在Linux系統中的C++程序中,異常處理主要通過try、catch和throw關鍵字來實現。下面是一個簡單的示例:
#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;
}
catch (...) {
// 捕獲所有其他類型的異常
std::cerr << "Caught an unknown exception" << std::endl;
}
return 0;
}
在這個示例中,我們使用try塊來包裹可能拋出異常的代碼。如果try塊中的代碼拋出了一個異常,程序會立即跳轉到與該異常類型匹配的catch塊。如果沒有找到匹配的catch塊,程序會調用std::terminate函數來終止程序。
在這個例子中,我們拋出了一個std::runtime_error類型的異常,并使用一個catch塊來捕獲它。catch塊的參數是一個對異常對象的常量引用,我們可以使用what()成員函數來獲取異常的描述信息。
注意,catch(...)可以捕獲所有類型的異常,包括那些沒有顯式throw語句的異常。這通常用于處理未知類型的異常,但在實際編程中,最好盡量避免這種情況,因為它可能導致程序崩潰或產生不可預測的行為。
此外,C++還支持自定義異常類,你可以通過繼承std::exception類或其他標準異常類來創建自己的異常類。例如:
#include <iostream>
#include <stdexcept>
class MyException : public std::runtime_error {
public:
MyException(const std::string& message) : std::runtime_error(message) {}
};
int main() {
try {
throw MyException("An error occurred in MyException");
}
catch (const MyException& e) {
std::cerr << "Caught MyException: " << e.what() << std::endl;
}
catch (const std::runtime_error& e) {
std::cerr << "Caught std::runtime_error: " << e.what() << std::endl;
}
catch (...) {
std::cerr << "Caught an unknown exception" << std::endl;
}
return 0;
}
在這個示例中,我們定義了一個名為MyException的自定義異常類,它繼承自std::runtime_error。然后我們在try塊中拋出一個MyException對象,并使用一個catch塊來捕獲它。