(一)
std::exception:标准异常类的基类,其类的声明在头文件<exception>中。所有标准库的异常类均继承于此类,因此通过引用类型可以捕获所有标准异常。
std::exception类定义了无参构造函数、拷贝构造函数、拷贝赋值运算符、一个虚析构函数和一个名为what的无参虚成员。其中what函数返回一个const char*,该指针指向一个以null结尾的字符数组,并且确保不会抛出任何异常,该字符串的目的是提供关于异常的一些文本信息。除析构函数外,其它函数均通过关键字noexcept说明此函数不会抛出异常。
(二)
异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持。在C++语言中,异常处理包括:
(1)、throw表达式(throw expression):异常检测部分使用throw表达式来表示它遇到了无法处理的问题。throw引发(raise)异常。throw表达式包含关键字throw和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型。throw表达式后面通常紧跟一个分号,从而构成一条表达式语句。抛出异常将终止当前的函数,并把控制权转移给能处理该异常的代码。
(2)、try语句块(try block):异常处理部分使用try语句块处理异常。try语句块以关键字try开始,并以一个或多个catch子句(catch clause)结束。try语句块中代码抛出的异常通常会被某个catch子句处理。因为catch子句处理异常,所以它们也被称作异常处理代码(exception handler)。catch子句包括三部分:关键字catch、括号内一个(可能未命名的)对象的声明(称作异常声明,exception declaration)以及一个块。当选中了某个catch子句处理异常之后,执行与之对应的块。catch一旦完成,程序跳转到try语句块最后一个catch子句之后的那条语句继续执行。一如往常,try语句块声明的变量在块外部无法访问,特别是在catch子句内也无法访问。如果一段程序没有try语句块且发生了异常,系统会调用terminate函数并终止当前程序的执行。
(3)、一套异常类(exception class):用于在throw表达式和相关的catch子句之间传递异常的具体信息。
函数在寻找处理代码的过程中退出:寻找处理代码的过程与函数调用链刚好相反。当异常被抛出时,首先搜索抛出该异常的函数。如果没有找到匹配的catch子句,终止该函数,并在调用该函数的函数中继续寻找。如果还是没有找到匹配的catch子句,这个新的函数也被终止,继续搜索调用它的函数。以此类推,沿着程序的执行路径逐层回退,直到找到适当类型的catch子句为止。如果最终还是没能找到任何匹配的catch子句,程序转到名为terminate的标准库函数。该函数的行为与系统有关,一般情况下,执行该函数将导致程序非正常退出。
(三)
exception
The most general kind of problem.
最常见的问题。
runtime_error
Problem that can be detected only at run time.
运行时错误:仅在运行时才能检测到问题
range_error
Run-time error: result generated outside the range of
values that are meaningful.
运行时错误:生成的结果超出了有意义的值域范围
overflow_error
Run-time error: computation that overflowed.
运行时错误:计算上溢
underflow_error
Run-time error: computation that underflowed.
运行时错误:计算下溢
logic_error
Problem that could be detected before run time.
逻辑错误:可在运行前检测到问题
domain_error
Logic error: argument for which no result exists.
逻辑错误:参数的结果值不存在
invalid_argument
Logic error: inappropriate argument.
逻辑错误:不合适的参数
length_error
Logic error: attempt to create an object larger than the
maximum size for that type.
逻辑错误:试图生成一个超出该类型最大长度的对象
out_of_range
Logic error: used a value outside the valid range.
逻辑错误:使用一个超出有效范围的值
(四)标准库异常类构成了下图所示的继承体系
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!