2018-05-18 创建人:Ruo_Xiao
邮箱:xclsoftware@163.com
一、C++ 异常处理的组成部分
C++的异常处理由throw表达式、try语句块、catch子句和异常类组成。
二、throw
throw表达式用来引发异常,其后表达式就是抛出的异常的类型,可以是int、double、类等。
栗子:
try
{
throw 1; //(1)
throw 1.0; //(2)
throw runtime_error("我是runtime_error错误!"); //(3)
}
catch (int i)
{
cout<<"我是int的错误!";
}
catch (double d)
{
cout<<"我是double的错误!";
}
catch (runtime_error err) //异常类
{
cout<<err.what();
}
依次执行(1)(2)和(3),其结果如下:
三、try
- 当异常抛出时,首先程序会在抛出异常的函数中搜索对应的catch子句,若不存在,则终止该函数,在调用该函数的函数中寻找匹配的catch子句,依次类推,直至找到匹配的catch子句。
- 上述过程中,若找不到匹配的catch子句,则程序转到标准的库函数terminate函数中,终止该函数。
- 若找到匹配的catch子句,执行完成之后,程序会跳转到try语句块最后的catch子句之后的那条语句执行。
四、异常类
- 作用:用来报告标准库函数遇到的问题。
- 定义在四个头文件中:
(1)exception头文件中定义了最通用的异常类exception,只报告异常发生,没有其他额外信息。
(2)stdexcept定义了如下异常类:
(3)new头文件定义的bad_alloc异常类型。
(4)type_info头文件定义的bad_cast异常类型。 - 上述中,exception、bad_alloc和bad_cast必须使用默认初始化。其他的类型必须使用string或者C风格字符串进行初始化。
(SAW:Game Over!)