1.介绍
try-catch是C++中用于异常处理的机制。通过try-catch,程序可以捕获并处理运行时发生的异常,从而避免程序崩溃,并提供更友好的错误处理方式。
2.try-catch用法
基本语法如下所示:
try {
// 可能抛出异常的代码
}
catch (异常类型1 异常变量) {
// 处理异常类型1
}
catch (异常类型2 异常变量) {
// 处理异常类型2
}
catch (...) { // 捕获所有异常
// 处理未知异常
}
try块:包含可能抛出异常的代码。
catch块:捕获并处理特定类型的异常。catch块可以有多个,用于处理不同类型的异常。
catch(...):捕获所有类型的异常,通常用于处理未知异常。
3.异常处理流程
1.如果try块中的代码抛出了异常,程序会立马跳转到匹配的catch块中。
2.如果找到匹配的catch块,则执行该块的代码。
3.如果没有找到匹配的catch块,异常会继续向上层调用栈传播,直到被捕获或程序终止。
4.如果没有异常抛出,catch块会被跳过,程序继续正常执行。
示例
#include <iostream>
#include <stdexcept> // 包含标准异常类
int main() {
try {
int numerator = 10;
int denominator = 0;
if (denominator == 0) {
throw std::runtime_error("除数不能为零!"); // 抛出异常
}
int result = numerator / denominator;
std::cout << "结果: " << result << std::endl;
}
catch (const std::runtime_error& e) { // 捕获 runtime_error 异常
std::cerr << "捕获到异常: " << e.what() << std::endl;
}
catch (...) { // 捕获所有其他异常
std::cerr << "捕获到未知异常!" << std::endl;
}
std::cout << "程序继续执行..." << std::endl;
return 0;
}
输出
捕获到异常: 除数不能为零!
程序继续执行...
4.注意事项
1.异常类型匹配:catch块会按照顺序匹配异常类型,因此更具体的异常类型应该放前边。
2.资源释放:如果异常抛出时分配了资源(如动态内存),需要在catch块中释放,或使用RAII(如智能指针)来管理资源。
3.性能开销:异常处理会带来一定的性能开销,应避免在频繁执行的代码中使用异常。
4.不要滥用异常:异常应仅用于处理异常情况,而不是控制程序流程。
5.总结
try-catch是C++ 中处理异常的核心机制,能够有效提高程序的健壮性。通过合理使用 try-catch,可以捕获和处理运行时错误,避免程序崩溃,并提供清晰的错误信息。
如有错误,敬请指正!!!