C++篇:第十三章_异常_知识点大全

  • C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器

十三、异常

① 函数指针与该指针所指的函数必须具有一致的noexcept异常说明(C++11使用noexcept指明函数是否抛出异常),而非相同。特别的,隐式声明为noexcept(false)的函数指针可以指向noexcept(true)的函数

② 编译器并不会在编译时检查noexcept声明,编译可以通过

③ 在异常声明的匹配规则中,绝大多数类型转换都不被允许,除了以下3种例外:

(1)允许从非常量到常量的转换;

(2)允许派生类到基类的转换;

(3)数组转数组元素指针,函数转函数指针。除此之外,包括标准算术类型和类类型转换在内,其他的转换规则不能在异常catch匹配中使用

  1. 异常分为两种,一种为运行异常,另一种为检查异常

对于运行异常,编译器没有强制对其进行捕获。会把异常一直往上层抛出,直到遇到处理代码为止

检查异常,所有继承自Exception并且不是运行异常的都是检查异常,在程序中需要用try catch进行捕获。常见的有IO异常和SQL异常

  1. throw语句:throw 表达式; // 表达式的类型决定了所抛出的异常类型,例如throw ‘a’ // 抛出char型异常

throw不加表达式表示再次抛出try块中检测到的异常表达式,该重抛异常不能被try-catch捕获,只能传到上一级函数

  1. 执行throw的时候,不会执行跟在throw后面的语句,而是将程序从throw转移到匹配的catch;throw抛出了异常对象必须是可以复制的类型(具有复制构造函数)

  2. 如果throw抛出了是指针,该指针是一个指向派生类对象的基类指针,则那个对象被分割,只抛出基类部分,且在抛出指针时,必须确保进入异常处理程序时的指针所指向的对象仍然存在

  3. try 块和catch块作为一个整体出现,catch块必须紧跟在try块之后,不能单独使用

posted @ 2022-04-10 20:57  Oten  阅读(55)  评论(0编辑  收藏  举报