C++ Primer阅读笔记--异常处理机制

2023-10-27

目录

1--异常处理机制

2--throw表达式

3--try语句块

4--标准异常类

5--代码实例


1--异常处理机制

        异常处理机制为程序中的异常检测和异常处理这两部分的协作提供支持;在 C++ 语言中,异常处理包括:throw表达式、try语句块和异常类;
        throw 表达式:异常检测部分使用 throw 表达式来表示其遇到的无法处理的问题,一般称为 throw 引发(raise)了异常;
        try 语句块:异常处理部分使用 try 语句块处理异常,其以关键字 try 开始,并以一个或多个 catch 子句结束;try语句块中抛出的异常通常会被某个 catch 子句处理,因此 catch 子句被称为异常处理代码;
        异常类:用于在 throw 表达式和相关的 catch 子句之间传递异常的具体信息;

2--throw表达式

        throw 表达式包含关键字 throw 和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型;

        抛出异常将终止当前函数,并把控制权转移给能处理该异常的代码;

// 当数据的 ISBN 不相同时,抛出一个 runtime_error 类型的异常对象
if(item1.isbn() != item2.isbn()){
    throw runtime_error("DATA must refer to same ISBN");
}

3--try语句块

        try 语句块的通用语法形式如下,即由一个 try 块和一个或多个 catch 子句块组成; catch 子句包括三部分:关键字 catch、括号内一个对象的声明(称为异常声明)、一个块;
        当选中某个 catch 子句处理异常时,会执行与之对应的块;catch 一旦完成,程序跳转到 try 语句块最后一个 catch 子句之后的语句继续执行;

        当异常被抛出时,会搜索能够处理该异常的函数;当未能找到任何匹配的 catch 子句时,程序会调用 terminate 函数来中止程序;

try{
    program-statements
} catch (exception-declaration){
    handler-statements
} catch (exception-declaration){
    handler-statements
}

4--标准异常类

        C++标准库定义了一组标准异常类,其分别定义在 exception、stdexcept、new 和 type_info 头文件中;

5--代码实例

// 代码实例
#include <iostream>
#include <stdexcept>
 
int main(int argc, char* argv[]){
    int color;
    std::cin >> color;
    std::cout << "your input is : " << color << std::endl;
    try{
        if (color > 255){
            // 抛出上溢错误
            throw std::overflow_error("上溢"); 
        } 
        else if(color < 0){
            // 抛出下溢错误
            throw std::underflow_error("下溢");
        }
    }
    // 捕获std::overflow_error的错误
    catch(std::overflow_error err1){ 
        color = 255;
    }
    // 捕获std::underflow_error的错误
    catch(std::underflow_error err2){ 
        color = 0;
    }
    std::cout << "Real valid data: " << color << std::endl;
 
    return 0;
}

       上述代码中,根据不同检测条件抛出了不同的异常,并由对应的 catch 语句进行处理;抛出的异常类型可以采用提供的标准异常,也可以自定义异常类型,上述代码中使用了由头文件 stdexcept 提供的两个标准异常类:std::overflow_error 和 std::underflow_error;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ Primer阅读笔记--异常处理机制 的相关文章

  • C# 打印问题(RichTextBox)

    我想打印我的 RichTextBox eintragRichTextBox 的内容 我现在有这个代码 private void druckenPictureBox Click object sender EventArgs e PrintD
  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 踩坑:Python找不到指定路径的文件 最全解决方法

    数据集为ucr时间序列数据集 其中 Adiac文件夹中的文件可以通过下面的代码打开 其他文件格式与Adiac相同 且在同一个目录文件下 跑其他的文件 会出现某某文件不存在的问题 网上找了各种解决方法都尝试了 依然还是会报文件找不到错误 最后
  • 程序媛菜鸡算法题流水账之ZJU机试题

    最近考研分数线还没有正式公布 感觉自己处在危殆边缘 于是分岔路口之多令我眼花缭乱 将近八个月没有碰过IDE 机试路漫漫 且行且记忆 ZJU机试题 from NewCoder 做题顺序为通过率递减 同时推荐用C 用时真的少很多 虽然我选修过但
  • Llama-2大模型本地部署研究与应用测试

    最近在研究自然语言处理过程中 正好接触到大模型 特别是在年初chatgpt引来的一大波AIGC热潮以来 一直都想着如何利用大模型帮助企业的各项业务工作 比如智能检索 方案设计 智能推荐 智能客服 代码设计等等 总得感觉相比传统的搜索和智能化
  • 【GD32】FreeRTOS-ADC-DMA采集

    本文章介绍ADC多通道采集DMA进行传输 并且在任务中实时去获取数据 一 时钟配置 分别配置GPIO ADC DMA时钟 static void SystemClock Configration void rcu periph clock
  • Autofac的AOP面向切面编程研究

    什么是AOP 我的理解是 把系统性的编程工作封装起来 我给这个取个名字叫 Aspect 然后通过AOP技术把它切进我们的业务逻辑代码 业务 这样的好处 Aspect 和 业务 相互独立 既可以让 业务 用到了 Aspect 又让2者互相独立
  • 8.1 霍纳法则

    以下是一个典型的多项式运算 int y 4 x x x x 9 x x x 2 x x 7 x 1 这个表达式能不能性能优化 细数一下这个表达式用了4 3 2 1 10次乘法 同时用到了4次加法 可以优化为 int y 4 x 9 x 2
  • django中使用celery和rabbitmq

    第一步先安装celery pip install django celery 第二步安装rabbitmq sudo apt get install rabbitmq server 添加用户 sudo rabbitmqctl add user
  • 【二叉树】层数最深叶子节点的和

    题目描述 给你一棵二叉树的根节点 root 请你返回 层数最深的叶子节点的和 示例1 输入 root 1 2 5 7 0 null null 输出 7 解题思路 这道题正向思路是每一层都做一次计算 直到等到最后一层的结果 TreeNode参
  • oracle 中的定时任务,定时删除前XXX天的数据

    今天公司大佬给了个活 具体情况如下 小牛 去写一个数据库的任务 定时删除 TABLE 这张表下前3天的数据 以insert time 数据入库时间 DATE类型 为准 定时任务名为JOB AI XXX 再给你两个提示 1 比如今天是 1月7
  • Unity IK 反动力学动画 (二)

    上一篇中的遗留问题是说手部会穿插身体 这一篇说说解决方案 解决这个问题是历经了很多思路 i 使用碰撞器 给头部和手部都添加碰撞器 ii 动画设置权重 怎么设置不知道 但是看到unity社区说 mecanim IK not respectin
  • tq210-kernel 3.0.8 SD卡作为文件系统

    将 卡作为文件系统 卡上存放uboot uimage filesystem 在ok210上测试 但是内核加载不上 只好又到这个板子上测试 结果测试通过 内核跑起来了 使用命令如下 set machid 998 set bootargs co
  • Angular6 引入 adminLTE2.4.8,adminLTE 代码拆分成组件,超级简约版

    1 引入 adminlte npm install admin lte save 2 此时 在node modules 文件夹下生成 admin lte文件夹 内容如下 3 在集成 admin lte 的时候 已经自动帮我们把 bootst
  • 大数据对于企业的价值,主要体现在哪几个方面?

    大数据对于企业的价值 更全面地来说可以体现在AI BI CI和DI 即人工智能 ArtificialIntelligence 商业智能 BusinessIntelligence 客户智能 CustomerIntelligence 和数据智能
  • Javascript获取N天前的日期

    var n n为天数 function N var now new Date var date new Date now getTime n 24 3600 1000 var year date getFullYear var month
  • gdb调试心得

    最近bug check过程中 学到不少关于gdb调用的方法 包括查看stack frame 及函数调用时的堆栈约定 总结如下 1 core文件中每个stack frame保存自己的ebp esp信息 2 ebp 8是第一个参数 ebp 12
  • linux c程序文件上锁,Linux C -> flock -> 上锁或解锁

    Linux C gt flock gt 上锁或解锁 解释 如果给当前文件加上独占锁 则其它程序进程在此文件未解锁前无法使用该文件 int out char buffer 100 abcdedffsdfsa out open aaaa O R
  • 【程序】程序员与中秋节的约会

    中秋节 这个盛满诗意与传说的节日 向来是人们心中的佳节 然而 当程序员这个神秘群体与之碰撞 节日的氛围便注入了别样的色彩 程序员的世界以代码为语言 而中秋的团圆与诗意 也能在代码中找到安放之处 一 中秋的代码之美 作为程序员 我们或许更习惯
  • DataEase查询报“Row XXX was cut by GROUP_CONCAT()”异常的解决

    MySql数据库查询时 或者insert into tables时报错 使用group concat报错 Row 55 was cut by GROUP CONCAT 网上查了一下是因为GROUP CONCAT有个最大长度的限制 超过最大长
  • boost::bind 详解

    转自 https www cnblogs com benxintuzi p 4862129 html boost bind是标准库函数std bind1st和std bind2nd的一种泛化形式 其可以支持函数对象 函数 函数指针 成员函数
  • C++ Primer阅读笔记--异常处理机制

    目录 1 异常处理机制 2 throw表达式 3 try语句块 4 标准异常类 5 代码实例 1 异常处理机制 异常处理机制为程序中的异常检测和异常处理这两部分的协作提供支持 在 C 语言中 异常处理包括 throw表达式 try语句块和异