C++ 异常处理是一种在程序运行时检测和响应错误的机制,主要通过try、catch、throw三个关键字实现。核心思想是分离错误检测和错误处理代码,提高程序的可读性和健壮性。
基本语法
抛出异常(throw)当检测到异常时,用
throw语句抛出异常对象:cpp
运行
throw std::runtime_error("Something went wrong");捕获异常(try-catch)使用
try块包裹可能抛出异常的代码,catch块捕获并处理异常:cpp
运行
try { // 可能抛出异常的代码 } catch (const std::exception& e) { // 处理异常 std::cerr << "Exception caught: " << e.what() << std::endl; }
异常类型
- 标准异常类:
std::exception是所有标准异常的基类,常用子类有:std::runtime_error:运行时错误std::logic_error:逻辑错误std::out_of_range:越界访问std::bad_alloc:内存分配失败
- 自定义异常:继承
std::exception并重写what()方法。
异常处理流程
- 程序执行到
throw时,暂停当前函数,查找最近的try-catch块。 - 若找到匹配的
catch块,则执行异常处理代码。 - 若未找到,则调用
std::terminate终止程序。
异常处理的优缺点
优点:
- 集中处理错误,代码更清晰。
- 支持跨函数传播异常。
缺点:
- 可能影响性能(异常路径不被编译器优化)。
- 过度使用可能导致代码复杂。
最佳实践
- 只在异常情况下使用异常,不要用于控制流。
- 抛出有意义的异常对象,便于调试。
- 捕获具体的异常类型,避免用
catch (...)捕获所有异常。 - 资源管理:配合 RAII(Resource Acquisition Is Initialization)技术(如智能指针),避免资源泄露。