5.6 try语句块和异常处理
5.6.1 throw表达式
throw
表达式包含关键字throw
和紧随其后的一个表达式,其中的表达式的类型就是抛出的异常类型。
if(item1.isbn() != item2.isbn())
throw runtime_error("Data must refer to same ISBN");
类型runtime_error
是标准库异常类型的一种,定义在stdexcept
头文件中。初始化runtime_error
对象的方式是给它提供一个string
对象或C风格的字符串。
5.6.2 try语句块
try {
program-statements // 一段可能抛出异常的代码
} catch (exception-declaration) { // catch子句括号内包括一个对象的声明(可以未命名)
handler-statements // 异常处理代码
}
try {
if(item1.isbn() != item2.isbn())
throw runtime_error("Data must refer to same ISBN");
...
} catch (runtime_error err) {
cout << err.what() << endl;
}
如果没有找到任何匹配的catch
子句,程序转到名为terminate()
的标准库函数。
5.6.3 标准异常
大多数异常类型应该使用string
对象或者C风格字符串初始化,提供含有错误相关的信息。异常类型只定义了一个名为what
的成员函数,该函数没有任何参数,返回值是一个C风格字符串的const char*
。