C++異常處理機制提供了兩種主要的捕獲方式:catch
塊和try-catch
語句。以下是這兩種方式的簡要說明和示例:
catch
塊:catch
塊用于捕獲和處理特定類型的異常。它緊跟在try
塊之后,并指定要捕獲的異常類型。當try
塊中的代碼拋出異常時,程序會立即跳轉到與該異常類型匹配的catch
塊。示例:
#include <iostream>
#include <stdexcept>
int main() {
try {
int denominator = 0;
if (denominator == 0) {
throw std::runtime_error("Division by zero");
}
int result = 10 / denominator;
std::cout << "Result: " << result << std::endl;
} catch (const std::runtime_error& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
try-catch
語句:try-catch
語句是一種更靈活的方式來捕獲和處理異常。它允許你在try
塊中捕獲多種類型的異常,并在不同的catch
塊中處理它們。此外,你還可以在一個catch
塊中捕獲多種類型的異常,只需將它們放在一起即可。示例:
#include <iostream>
#include <stdexcept>
int main() {
try {
int denominator = 0;
if (denominator == 0) {
throw std::runtime_error("Division by zero");
}
int result = 10 / denominator;
std::cout << "Result: " << result << std::endl;
} catch (const std::runtime_error& e) {
std::cerr << "Error: " << e.what() << std::endl;
} catch (const std::exception& e) {
std::cerr << "Unexpected error: " << e.what() << std::endl;
} catch (...) {
std::cerr << "Unknown error occurred" << std::endl;
}
return 0;
}
在這個示例中,我們捕獲了std::runtime_error
類型的異常,并處理了它。我們還捕獲了所有其他類型的std::exception
異常和一個通用的...
異常,以便處理未知的異常情況。