C++基础学习笔记——C++异常处理
异常处理关键字:
在编程时经常会对项目进行测试,但是一般代码中出现了错误时,程序会因为错误无法向下执行而卡住或中断。有时在测试代码时希望程序就算出现了异常状况也能继续执行相应的处理而不是直接中断或卡住。
在C++中,一个函数能够检测出异常并且将异常返回,这种机制称为抛出异常。当抛出异常后,函数调用者捕获到该异常,并对该异常进行处理,我们称之为异常捕获。
C++新增throw关键字用于抛出异常,新增catch(){ }关键字用于捕获异常,新增try关键字尝试捕获异常。通常将尝试捕获的语句放在 try{ } 程序块中,而将异常处理语句置于 catch{ } 语句块中。
简单说,先设置enum枚举类型变量来代表所产生的异常种类(或者可以不设置,使用C++自带的默认异常类型),由try{ }进入要异常处理的代码段,代码段运行后自动调用throw抛出异常,然后通过**catch()**判断异常的种类,根据相应种类选择处理方式。
异常处理代码实例:
#include<iostream>
using namespace std;
enum index{underflow, overflow}; //设置enum型变量代表异常类型,这里有两种异常
//子程序判定数组的下标是否异常(小于0或大于数组容量)
int array_index(int *A, int n, int index)
{
if(index < 0) throw underflow; //出现异常调用throw关键字抛出
if(index > n-1) throw overflow;
return A[index]; //无异常返回下标代表的数据
}
int main()
{
int *A = new int[10];
for(int i=0; i<10; i++)
A[i] = i;
try
{
cout<<array_index(A,10,5)<<endl;
cout<<array_index(A,10,-1)<<endl;
cout<<array_index(A,10,15)<<endl;
}
catch(index e)
{
if(e == underflow) //判定异常类型为下标小于0
{
cout<<"index underflow!"<<endl;
exit(-1);
}
if(e == overflow) //判定异常类型为下标大于容量
{
cout<<"index overflow!"<<endl;
exit(-1);
}
}
return 0;
}
使用C++自带异常类型进行异常处理:
int * p;
try
{
p = new int[10];
}
//如果new关键字分配内存失败,C++默认抛出bad_alloc异常类型
catch(bad_alloc)
{
cerr<<"allocate failure!"<<endl;
exit(-1);
}