异常
异常处理就是处理程序中的错误。所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在,空指针,内存不足等等)
- try 试图执行 try{}中的内容
- 在可能出现异常的地方 抛出异常 throw
- try下面 catch捕获异常
- catch( 捕获类型 ) …代表 所有其他类型
- 如果不想处理异常,继续向上抛出 throw
- 如果没有任何处理异常的地方,那么成员调用terminate函数,中断程序
- 自定义异常类 ,可以抛出自定义的对象 ,捕获自定义的异常
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //如果判断返回值,那么返回值是错误码还是结果? //如果不判断返回值,那么b==0时候,程序结果已经不正确 //A写的代码 int A_MyDivide(int a, int b) { if (b == 0) { throw - 1; //抛出int异常 //throw 3.14; //抛出double异常 异常必须处理,如果不处理 就挂掉 } return a / b; } void test01() { int a = 10; int b = 0; try { A_MyDivide(a, b); } catch (int) //捕获int异常 对应抛出的异常 如果不符合 则不走这里 { //如果不想处理这个异常 可以继续向上抛出 throw; } catch (...) //捕获所有类型异常 { cout << "其它类型异常捕获" << endl; } } int main() { try { test01(); } catch (int) //如果抛出的异常都没有得到处理, 那么成员terminate函数会使程序中断 { cout << "main 函数int异常捕获" << endl; } catch (...) { cout << "main 函数其它异常捕获" << endl; } system("Pause"); return 0; }
结果:
总结:
- 若有异常则通过throw操作创建一个异常对象并抛出。
- 将可能抛出异常的程序段放到try块之中。
- 如果在try段执行期间没有引起异常,那么跟在try后面的catch字句就不会执行。
- catch子句会根据出现的先后顺序被检查,匹配的catch语句捕获并处理异常(或继续抛出异常)
- 如果匹配的处理未找到,则运行函数terminate将自动被调用,其缺省功能调用abort终止程序。
- 处理不了的异常,可以在catch的最后一个分支,使用throw,向上抛。
c++异常处理使得异常的引发和异常的处理不必在一个函数中,这样底层的函数可以着重解决具体问题,而不必过多的考虑异常的处理。上层调用者可以在适当的位置设计对不同类型异常的处理。