---- 整理自狄泰软件唐佐林老师课程
1. 问题
如何判断一个函数是否会抛出异常,以及抛出哪些异常?
- C++提供语法用于声明函数所抛出的异常
- 异常声明作为函数声明的修饰符,写在参数列表后面
1.1 异常规格说明的意义
- 提示函数调用者必须做好异常处理的准备
- 提示函数的维护者不要抛出其它异常
- 异常规格说明是函数接口的一部分
1.2 思考
如果抛出的异常 不在声明列表中,会发生什么?
- 下面的代码输出什么?
1.3 编程实验:异常规格之外的异常
- 函数抛出的异常不在规格说明中,全局unexpected()被调用
- 默认的unexpected()函数 会调用 全局的terminate()函数
- 可以 自定义函数 替换默认的unexpected()函数实现
- 注意:不是所有的C++编译器都支持这个标准行为
- unexpected()函数的替换
- 自定义一个无返回值无参数的函数
- 能够再次抛出异常
- 当异常符合触发函数的异常规格说明时,恢复程序执行
- 否则,调用全局terminate()函数结束程序
- 能够再次抛出异常
- 调用set_unexpected()设置自定义的异常函数
- 参数类型为void(*)()
- 返回值为默认的unexpected()函数入口地址
- 自定义一个无返回值无参数的函数
1.4 编程实验:自定义unexpected()函数
2. 小结
- C++中的函数可以声明异常规格说明
- 异常规格说明可以看作接口的一部分
- 函数抛出的 异常不在规格说明中,unexpected() 被调用
- unexpected()中 能够 再次抛出异常
- 异常能够匹配,恢复程序的执行
- 否则,调用terminate()结束程序