异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持。在C++语言中,异常处理包括:
(1)throw表达式(throw expression),异常检测部分使用throw表达式来表示它遇到了无法处理的问题。我们说throw引发了异常。
(2)try语句块(try block),异常处理部分使用try语句块处理异常。try语句块以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理。因为catch子句“处理”异常,所以他们也被称作异常处理代码。
(3)一套异常类(exception class),用于在throw表达式和相关的catch子句之间传递异常的具体信息。
1、throw表达式
int a = 0, b =0;
if(a != b)
{
throw runtime_error(“a不等于b”); //runtime_error是标准库异常类型的一种,定义在stdexcept头文件中
}
2、try语句块
try{
program-statements;
}catch(exception-declaration){
handler-statements
}catch(exception-declaration){
handler-statements
}…
跟在try块之后的是一个或多个catch子句。catch子句包括三部分:关键字catch,括号内一个(可能为命名的)对象的声明(称作异常声明)以及一个块。
如:
try{
if(true)
{
throw runtime_error(“throw one error”);
}catch(runtime_error err)
{
cout << err.what(); //异常类型只定义了一个名为what的成员函数,用以提供异常的一些文本信息
}
}
注意:如果异常抛出后没有找到对应的catch语句,程序会异常退出。
3、标准异常
(1)exception头文件定义了最通用的异常类exception。它只报告异常的发生,不提供任何额外信息。
(2)stdexcept头文件定义了集中常用的异常类:
exception : 最常见得问题;
runtime_error : 只有在运行时才能检测出的问题;
range_error : 运行时错误:生成的结果超出了有意义的值域范围;
overflow_error : 运行时错误:计算上溢
underflow_error : 运算时错误:计算下溢
logic_error : 程序逻辑错误
domain_error : 逻辑错误:参数对应的结果值不存在
invalid_argument : 逻辑错误:无效参数
length_error : 逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range : 逻辑错误:使用一个超出有效范围的值
(3)new头文件定义了bad_alloc异常类型;
(4)type_info头文件定义了bad_cast异常类型。