异常是指在程序运行时的反常行为。如果程序中含有可能引发异常的代码,则需要专门的代码对其进行处理。
异常处理包括
1,throw表达式:异常检测部分使用throw表达式来表示它遇到了无法处理的问题。
2,try语句块中抛出的异常由switch子句处理异常
3,一套异常类:用于在throw表达式和相关的catch子句之间传递异常的具体消息。
举个例子,程序转载自
https://github.com/pezy/CppPrimer/blob/master/ch05/ex5_25.cpp
两个数相÷的程序,除数为0 产生异常。
#include <iostream>
#include <stdexcept>
using namespace std;
int main()
{
int a, b;
cout << "Input two integers: ";
while (cin >> a >> b) {
try {
if (b == 0) throw runtime_error("divisor is 0");
cout << static_cast<double>(a) / b << endl;
cout << "Input two integers: ";
}
catch (runtime_error err) {
cout << err.what();
cout << "\nTry Again? Enter y or n:" << endl;
char c;
cin >> c;
if (!cin || c == 'n')
break;
}
}
return 0;
其中runtime_error是一个异常类。
异常类定义在4个头文件中:
1,exception头文件定义了最通用的异常类exception。
2,stdexcept头文件定义了常用的异常类
rentime_error//运行时错误
range_error//结果超出了有意义的值域范围
overflow_error//计算上溢
underflow_error//计算下溢
logic_error//逻辑错误
domain_error//参数对应的结果,值不存在
invalid_error//无效参数
length_error//试图创建一个超出该类型最大长度的对象
out_of_range//使用超出有效范围的值
3,new头文件定义了bad_alloc异常类型
4,type_info头文件定义了bad_cast异常类