最近在学习OpenGL时碰到了文件抛出异常问题,对于这个不是很了解,百度了一下回来做个整理
为什么需要异常处理
程序运行时常会碰到一些错误,例如除数为 0、年龄为负数、数组下标越界、文件不存在等,这些错误如果不能发现并加以处理,很可能会导致程序崩溃。
C++ 异常处理机制就可以让我们捕获并处理这些错误,然后我们可以让程序沿着一条不会出错的路径继续执行,或者不得不结束程序,但在结束前可以做一些必要的工作,例如将内存中的数据写入文件、关闭打开的文件、释放分配的内存等。
基本用法
由throw语句和try…catch语句实现
throw 表达式;//抛出一个异常,基本类型或类
try{
语句组
}
catch(异常类型) {
异常处理代码
}
...
catch(异常类型) {
异常处理代码
}
//catch可以多个,至少一个
try…catch 语句的执行过程是:
执行 try 块中的语句,如果执行的过程中没有异常拋出,那么执行完后就执行最后一个 catch 块后面的语句,所有 catch 块中的语句都不会被执行;
如果 try 块执行的过程中拋出了异常,那么拋出异常后立即跳转到第一个“异常类型”和拋出的异常类型匹配的 catch 块中执行(称作异常被该 catch 块“捕获”),执行完后再跳转到最后一个 catch 块后面继续执行。
C++ exception类
下图展示了exception类的继承层次
exception 类的直接派生类:
logic_error 的派生类:
runtime_error 的派生类: