C++中的try-catch
机制是处理运行时异常的核心工具,通过try
检测异常、catch
捕获并处理异常,结合throw
主动抛出异常,实现代码的健壮性。 关键亮点包括:支持多类型异常捕获、可自定义异常类、兼容标准异常体系,以及跨函数栈的异常传播。
-
基础语法与流程
try
块包裹可能引发异常的代码,后接一个或多个catch
块。例如:cpp复制
try { if (b == 0) throw "除零错误"; // 抛出异常 } catch (const char* e) { cout << "错误: " << e; // 捕获处理 }
异常抛出后,程序立即跳转至匹配的
catch
块,未匹配则向调用栈上层传播。 -
多类型异常处理
通过多个catch
块区分不同异常类型,按顺序匹配。例如:cpp复制
try { throw 42; // 抛出int类型异常 } catch (int e) { cout << "整数异常: " << e; } catch (...) { // 捕获所有未处理异常 cout << "未知异常"; }
-
标准异常与自定义异常
C++提供<exception>
中的标准异常类(如std::runtime_error
),同时支持继承std::exception
自定义异常:cpp复制
class MyException : public std::exception { const char* what() const noexcept override { return "自定义异常"; } };
-
异常传播与重新抛出
异常可跨函数传递,若当前函数无法处理,可通过throw;
重新抛出。例如:cpp复制
void func() { try { /* ... */ } catch (...) { throw; } // 传递给上层调用者 }
-
**实践
- 优先捕获具体异常类型,避免滥用
catch(...)
。 - 资源管理需结合RAII(如智能指针),防止异常导致泄漏。
- 使用
noexcept
标记不抛异常的函数,优化性能。
- 优先捕获具体异常类型,避免滥用
合理使用try-catch
能显著提升代码可靠性,但需注意避免过度使用导致逻辑复杂化。建议结合具体场景选择异常处理策略,例如关键逻辑严格捕获,性能敏感模块改用错误码。