💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 一.异常处理 1. **异常** 运行时的反常行为。 2. **异常处理** 对运行时出现的差错以及其他例外情况的处理。 3. **包含的内容** + `throw` 表达式,用于引发一个异常。 + `try` 语句块,用于检查语句。 + `catch` 子句,用于捕获和处理异常。 + [可选]异常类,用于传递异常的具体信息。如数组类越界访问时,访问的下标,以及下标访问的上下限。 ## 二.throw表达式 1. 格式 `throw 表达式;` 其中,表达式的类型就是抛出的异常类型。 2. 在函数声明和定义中用 `throw` 指定要抛出的异常类型。若没有 `throw` 表达式,则函数可以抛出任意类型的异常。 >[warning]若需使用,则函数定义和声明都必须出现。 ```c++ throw () //[11!][20-]不抛出任何异常,若函数中出现throw语句,程序将终止运行 throw (类型名,类型名,...) //[11!][17-]抛出指定类型的异常 ``` ```c++ int at(int index) throw(OutOfRange); //限制抛出错误为OutOfRange template <typename T> T my_abs(T num) throw();//不抛出任何异常 ``` ## 三.try语句块 1. 格式 ```c++ try { /*要检查的语句*/ } catch (异常类型 标识符) { /*异常处理语句*/ } /*更多的 catch 子句,末尾没有分号*/ ``` 2. 检查的语句内若抛出异常,则直接跳转到 `catch` 子句,而出错语句后面的语句不再执行。 3. 若出现异常且没有被捕获,则程序会终止运行。 ## \[11+\][$]四.noexcept 1. `noexcept` 修饰符 + 用于表示函数在什么时候不抛出异常。 + 它不是函数声明的一部分。 ```c++ noexcept //不抛出任何异常,若程序运行期间抛出异常,程序会终止。 noexcept (常量表达式) //若常量表达式为true,则声明函数不抛出异常 ``` ```c++ int at(int index) noexcept(false); //可能会抛出异常 template <typename T> T my_abs(T num) noexcept;//不抛出任何异常 ``` 2. `noexcept` 运算符 + **目数** 单目 + **返回值** bool类型的右值常量表达式 + **功能** 表示给定的表达式是否会抛出异常。和 `sizeof` 类似,它不会求运算对象的值。 ```c++ noexcept(my_abs(i));//true,不抛出任何异常 ```