C++之异常处理(try...catch)

-
-
2026-02-13 09:51
本文内容为《C++ Primer(第五版)》相关章节整理而得。
异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持,它包括:
  • throw表达式(throw expression):异常检测部分
  • try语句块(try block):异常处理部分,try语句块以关键字try开始,并以一个或多个catch字句结束。
  • 一套异常类(exception class):用于在throw表达式和相关的catch子句之间传递异常的具体信息。

throw表达式

  • throw表达式包含throw关键字和紧随其后的一个表达式,表达式类型就是抛出的异常类型。

try语句块

  • 通用语法形式
    try {
    	program-statements
    } catch (exception-declaration) {
    	handler-statements
    } catch (exception-declaration) {
    	handler-statements
    } // ...

    catch子句包括三部分:关键字catch异常声明语句块

标准异常

C++标准库定义了一组类,用于报告标准库函数遇到的问题。它们分别定义在4个头文件中:

  • exception头文件:定义了最通用的异常类exception,只报告异常的发生,不提供任何额外信息。
  • stdexception头文件:定义了数种常用的异常类型:
    • exception:最常见的问题
    • runtime_error:运行时异常
    • range_error:运行时错误:生成的结果超出了有意义的值域范围
    • overflow_error:运行时错误:计算上溢
    • underflow_error:运行时错误:计算下溢
    • logic_error:程序逻辑错误
    • domain_error:逻辑错误:参数对应的结果值不存在
    • invalid_argument:逻辑错误:无效参数
    • length_error:逻辑错误:试图创建一个超出该类型最大长度的对象
    • out_of_range:逻辑错误:使用一个超出有效范围的值
  • new头文件:定义了bad_alloc异常类型:
    • 表示内存耗尽
  • type_info头文件:定义了bad_cast异常类型:
    • dynamic_cast转换目标位引用类型且失败了,则抛出该异常

异常类型之定义了一个名为what的成员函数,该函数没有任何参数,返回一个const char*,用于提供异常的文本信息。


目录