C++学习—— try 语句块和异常处理

try 语句块和异常处理

异常是指存在于运行时的反常行为,这些行为超出了函数正常功能的范围。

异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持。
C++中,异常处理包括:

  • throw 表达式,异常检测部分使用 throw 表达式来表示它遇到了无法处理的问题。 (throw 引发了异常)
  • try 语句块,异常处理部分使用 try 语句块处理异常。
    try 语句块以关键字 try 开始,并以一个或多个 catch 子句结束。
    try 语句块中代码抛出的异常通常会被某个 catch 子句处理。
    catch 子句“处理”异常,所以它们也被称作异常处理代码
  • 一套异常类,用于在throw表达式和相关的 catch 子句之间传递异常的具体信息。

throw 表达式

程序的异常检测部分使用 throw 表达式引发一个异常。

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

throw 表达式后面通常紧跟一个分号,从而构成一条表达式语句。

//首先检查两条数据是否是关于同一种书籍的
if (item1.isbn() != item2.isbn())
	throw runtime_error("Data must refer to same ISBN");
//如果程序执行到了这里,表示两个 ISBN 是相同的
cout << item1 + item2 << endl;

抛出异常将终止当前的函数,并把控制权转移给能处理该异常的代码。

try 语句块

try 语句块的通用语法形式:

try {
	程序语句
} catch (异常声明) {
	处理语句
} catch (异常声明) {
	处理语句
} // ...

标准异常

C++ 标准库定义了一组类,用于报告标准库函数遇到的问题。
这些异常类也可以在用户编写的程序中使用,它们分别定义在4个头文件中:

  • exception 头文件定义了最通用的异常类 exception 。它只报告异常的发生,不提供任何额外信息。
  • stdexcept 头文件定义了几种常用的异常类。
  • new 头文件定义了 bad_alloc 异常类型。
  • type_info 头文件定义了 bad_cast 异常类型。

在这里插入图片描述

标准库异常类只定义了几种运算,包括创建或拷贝异常类型的对象,以及为异常类型的对象赋值。

只能以默认初始化的方式初始化 exception 、bad_alloc 和 bad_cast 对象,不允许为这些对象提供初始值。

其他异常类型的行为恰好相反。当创建此类对象时,必须提供初始值,该初始值含有错误相关的信息。

异常类型只定义了一个名为 what 的成员函数,该函数没有任何参数,返回值是一个指向C风格字符串的 const char* 。
该字符串的目的是提供关于异常的一些文本信息。

学习参考资料:

C++ 中文版 Primer   (第5版)
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐