林锐《高质量程序设计指南C/C++》笔记04:异常处理
笔者有幸得到一次和行业前辈交流的机会,前辈也分享了他对于职业规划、人生发展的理解和感悟,笔者也获益颇丰。另外由于笔者主要方向是C/C++,刚入门不久,前辈也是针对能力提升方面推荐了很多课程和书籍,其中就有这本 《高质量程序设计指南C/C++》作者林锐,第三版。
笔者先大致浏览了一遍该书,发现有很多平时开发或学习中没有注意到的小细节,因此新开一帖,作为自用的学习笔记。本系列由于是读书笔记,因此主要会记录平时没有留意的细节问题,并针对这些问题会提出一些额外问题和分析,如底层实现和延伸思考。
自己也是刚入门不久,可能会有些错误,欢迎大家一起学习,不吝赐教,有任何问题可以评论私信。
前面几篇:
林锐《高质量程序设计指南C/C++》笔记01:基本数据类型、类型转换
林锐《高质量程序设计指南C/C++》笔记02:断言、数组访问、位域、条件编译
林锐《高质量程序设计指南C/C++》笔记03:虚继承、C++重载内联
文章目录
- 第十五章:C++异常处理
- 一、使用方法:
- 二、异常执行顺序:
- 三、注意:
- 四、异常的类型匹配规则:
- 1. 精确匹配
- 2. 基类匹配
- 3. 基类指针匹配
- 4. void* 捕获任何类型的指针异常
- 5. 用 ... 捕获所有异常
- 注意:
- 总结
第十五章:C++异常处理
异常处理机制实际上是一种运行时通知机制。 由底层代码通知高层代码,通知的方式就是抛出一个异常。
一、使用方法:
异常处理包括:抛出异常throw
、提炼异常try{}
、捕获异常catch{}
和异常对象本身。
throw
语句:
用于抛出一个异常,可以抛出任何类型的对象(如整数、字符串、自己定义的类型对象等)
例如:throw 20;
或throw std::runtime_error("Error message");
- 异常是通过类型而不是值来进行匹配。
- 一个
throw
语句只能抛出一个异常。
try{}
代码块:
该代码块中的代码在执行时可能会抛出异常。
常常是在try
块中通过if
来判断是否throw
一个或多个异常。示例见下面代码。
- 每一个
try
块后面必须至少跟着一个catch
块。
catch{}
代码块:
用于捕获异常并处理,catch
块紧随try
块之后。
- 一个
catch{}
只能捕获一个异常,但是可以有多个catch{}
块来捕获不同类型的异常。如:
try {// 可能引发异常的代码if (some_error_condition) {throw std::runtime_error("An error occurred");}
} catch (const std::runtime_error &e) {// 处理 runtime_error 类型的异常std::cerr << "Runtime error: " << e.what() << std::endl;
} catch (const std::exception &e) {// 处理所有其他 std::exception 派生类的异常std::cerr << "Exception: " << e.what