C++ 异常捕获和处理 た 入场券 2022-05-28 08:44 335阅读 0赞 # [C++之异常捕获和处理][C] # ### 一、简介 ### 在C++语言中,异常处理包括:`throw表达式`,`try语句块`,`一套异常类`。其中,异常类用于在throw表达式和相关的catch子句之间传递异常的具体信息。exception头文件定义了最普通的异常类exception,它只报告异常的发生,不提供任何额外信息。以下是定义在stdexcept头文件中的常用的异常类: <table> <thead> <tr> <th style="border-color:#c0c0c0;">异常类</th> <th style="border-color:#c0c0c0;">解释</th> </tr> </thead> <tbody> <tr> <td style="border-color:#c0c0c0;">exception</td> <td style="border-color:#c0c0c0;">最常见的问题</td> </tr> <tr> <td style="border-color:#c0c0c0;">runtime_error</td> <td style="border-color:#c0c0c0;">只有在运行时才能检测出的问题</td> </tr> <tr> <td style="border-color:#c0c0c0;">range_error</td> <td style="border-color:#c0c0c0;">运行时错误:生成的结果超出了有意义的值域范围</td> </tr> <tr> <td style="border-color:#c0c0c0;">overflow_error</td> <td style="border-color:#c0c0c0;">运行时错误:计算上溢</td> </tr> <tr> <td style="border-color:#c0c0c0;">underflow_error</td> <td style="border-color:#c0c0c0;">运行时错误:计算下溢</td> </tr> <tr> <td style="border-color:#c0c0c0;">logic_error</td> <td style="border-color:#c0c0c0;">程序逻辑错误</td> </tr> <tr> <td style="border-color:#c0c0c0;">domain_error</td> <td style="border-color:#c0c0c0;">逻辑错误:参数对应的结果值不存在</td> </tr> <tr> <td style="border-color:#c0c0c0;">invalid_argument</td> <td style="border-color:#c0c0c0;">逻辑错误:参数无效</td> </tr> <tr> <td style="border-color:#c0c0c0;">length_error</td> <td style="border-color:#c0c0c0;">逻辑错误:试图创建一个超过该类型最大长度的对象</td> </tr> <tr> <td style="border-color:#c0c0c0;">out_of_range</td> <td style="border-color:#c0c0c0;">逻辑错误:使用一个超出有效范围的值</td> </tr> </tbody> </table> 异常类只定义了一个名为what的成员函数,该函数没有任何参数,返回值是一个指向C风格字符串的const char\*。 ### 二、基本用法 ### 直接贴代码,简单测试一下: #include <stdexcept> #include <iostream> using namespace std; void test() { throw runtime_error("just for test!"); } int main() { try { test(); } catch(runtime_error err) { cout << err.what() << endl; } return 0; } /* * 执行的结果不出意料,便是:just for test! * 可以有多个catch语句块 * 找到了匹配的runtime_error便执行相应的catch语句块代码 */ > 注意:当执行一个throw时,跟在throw后面的语句将不再被执行。且只有在catch语句块中可以使用`throw;`这样的语句,表示当前的catch语句不足与完整地处理好这个异常,于是决定由更上一层的函数接着处理。 ### 三、noexcept ### 概括来说,这个关键字有两种用法:作为函数限定符,作为一个一元运算符返回一个bool类型的右值常量表达式。 第一个用法中,noexcept放在函数的后面,一般而言,对于成员函数来说,放在const后面,而放在final、override或虚函数的=0之前。其表示该函数不会抛出异常,但如下情况也可以顺利编译: void f() noexcept { throw exception(); } 需要注意的是,函数指针及该函数指向的函数必须具有一致性的异常说明,如下: void (*pf1)(int) noexcept; void f() noexcpt {} void t() {} pf1 = f; //正确,因为f能保证不抛出异常 pfi = t; //错误,因为t不能保证 第二个用法中,可以如下使用: noexcept(f()) //若f保证不抛出异常,则返回true //一个常用用法,等价于void t() {} void t() noexcept(false) {} //以下保证f和g的异常类型一致 void f() noexcept(noexcept(g())); ### 四、定义自己的异常类 ### 假设你想设计一个异常类,名为test\_error,其的效果和runtime\_error一样,可以用如下代码: class test_error : public runtime_error { public: explicit test_error(const string &s): runtime_error(s) {} }; [C]: https://blog.csdn.net/yuleidnf/article/details/79788886
相关 Java异常处理:常见异常和捕获示例 在Java编程中,异常处理是一种机制,用于在程序执行过程中遇到错误或意外情况时进行处理。以下是一些常见的Java异常以及相应的捕获示例: 1. `NullPointerExc 浅浅的花香味﹌/ 2024年09月18日 13:00/ 0 赞/ 17 阅读
相关 Java异常处理:空指针异常捕获和处理 在Java编程中,空指针异常(NullPointerException)是一种常见的运行时错误。当尝试访问或操作一个null对象的属性或方法时,就会抛出这个异常。 下面是一个 水深无声/ 2024年09月17日 22:36/ 0 赞/ 29 阅读
相关 Java异常处理:捕获和处理空指针异常 在Java编程中,空指针异常(NullPointerException)是一种常见的运行时异常。当试图访问一个null引用的对象的属性或方法时,就会抛出这个异常。 以下是如何 小咪咪/ 2024年09月16日 23:06/ 0 赞/ 23 阅读
相关 Java异常处理:捕获和处理IOException 在Java中,IOException是一个基本的异常类型,它表示I/O操作(如文件读写)发生了错误。 下面是如何捕获和处理IOException的例子: ```java i 柔光的暖阳◎/ 2024年09月15日 23:21/ 0 赞/ 18 阅读
相关 Java异常处理:捕获和处理常见异常示例 在Java编程中,异常处理是一种机制,用于在程序执行过程中遇到错误或异常情况时,能够优雅地捕获并处理这些异常。 以下是一些常见异常的捕获和处理示例: 1. **空指针异常* 以你之姓@/ 2024年09月10日 23:39/ 0 赞/ 39 阅读
相关 异常处理:捕获和处理自定义异常示例 在编程中,异常处理是一种机制,用于捕获和处理程序运行过程中发生的错误。以下是一个使用Python捕获并处理自定义异常的示例: ```python # 定义一个自定义异常类 c 男娘i/ 2024年09月06日 04:00/ 0 赞/ 13 阅读
相关 【C++】异常处理 ② ( 异常捕获类型 | 异常捕获机制 - 严格匹配异常类型 | 未知异常捕获 - 不知道异常类型 ) 文章目录 一、异常捕获机制 - 严格匹配异常类型 1、异常捕获机制 - 严格匹配异常类型 2、代码示例 - 异常捕获严格匹配异常类型 痛定思痛。/ 2024年02月17日 12:26/ 0 赞/ 19 阅读
相关 Java异常捕获和处理 Java异常捕获和处理 参考文章: [(1)Java异常捕获和处理][1_Java] (2)https://www.cnblogs.com/cgy-home/p/1121 心已赠人/ 2022年08月28日 10:55/ 0 赞/ 200 阅读
相关 C++ 异常捕获和处理 [C++之异常捕获和处理][C] 一、简介 在C++语言中,异常处理包括:`throw表达式`,`try语句块`,`一套异常类`。其中,异常类用于在thr た 入场券/ 2022年05月28日 08:44/ 0 赞/ 336 阅读
还没有评论,来说两句吧...