C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常

2024-03-28 08:38

本文主要是介绍C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. catch 子句 (catch clause) 中的异常声明(exception declaration)

声明的类型决定了处理代码所能捕获的异常类型。

这个类型必须是完全类型, 它可以是左值引用, 但不能是右值引用

1.1 catch 的参数类型可以是引用类型或非引用类型

如果 catch 的参数是基类类型, 则我们可以使用其派生类类型的异常对象对其进行初始化。 此时, 如果 catch 的参数是非引用类型, 则异常对象将被切掉一部分

异常声明的静态类型将决定 catch 语句所能执行的操作。如果 catch 的参数是基类类型, 则 catch 无法使用派生类特有的任何成员。

1.2 查找匹配的处理代码

在搜寻 catch 语句的过程中, 我们最终找到的 catch 未必是异常的最佳匹配。 相反,挑选出来的应该是第一个与异常匹配的 catch 语句。 因此, 越是专门的 catch 越应该置于整个 catch 列表的前端

绝大多数类型转换都不被允许, 除了一些极细小的差别之外:

  • 允许从非常量向常量的类型转换, 也就是说, 一条非常量对象的 throw 语句可以匹配一个接受常量引用的 catch 语句。
  • 允许从派生类向基类的类型转换。
  • 数组被转换成指向数组( 元素) 类型的指针, 函数被转换成指向该函数类型的指针

1.3 重新抛出

一条 catch 语句通过重新抛出 (rethrowing) 的操作将异常传递给另外一个 catch 语句。 这里的重新抛出
仍然是一条 throw 语句, 只不过不包含任何表达式:
throw;

{// 使用引用类型的异常声明catch (my_error &eObj) {eObj.status = errCodes::severeErr;     //修改异常对象throw;//重新抛出} catch (other_error_eObj) {// 非引用类型eObj.status = errCodes::badErr;//只是修改了对象的局部副本throw;//异常对象的status没有修改}
}

1.4 .捕获所有异常 (catch-all)

使用省略号作为异常声明,如 catch (… )

catch(…);一条语句可以和任意类型的异常对象匹配。

它经常和重新抛出语句一起使用,其中catch执行完当前局部能够完成的工作之后,重新抛出异常。

{void manip () {try {// 这里的操作将引发并抛出一个异常} catch (...) {// 处理异常的某一些操作throw;}}// catch(...)既可以单独出现// 也可以和其他的catch一起出现// 如果和其他的catch一起出现// 则它必须放在最后的位置// 否则放在捕获所有异常的catch语句之后的catch语句永远不会被执行
}

这篇关于C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855067

相关文章

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效