我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++ try-catch语法分析与应用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++ try-catch语法分析与应用

3 try-catch语法分析

通过前面的学习,我们了解了try-catch语法的基本使用。但是,C++提供的异常处理机制很全面,下面再具体分析。

发生异常的时候,我们可以主动抛出一个异常,所以,使用throw抛出一个异常。异常可以是一个数值,字符,或者表达式。

抛出的异常可以有try-catch语句捕获。try-catch的语法结构如下:

try-catch的结构为

try

{

被检查的语句

}

catch(异常信息类型[变量名])

{

进行异常处理的语句

}

归纳总结如下:

(1) 被检测的异常代码必须放在try块中,捕获不到异常。

(2) try块和catch块作为一个整体出现,catch块数try-catch结构中的一部分,必须紧跟在try块之后,不能单独使用,在二者之间也不能插入其他语句,例如下面的用法不对:

try

{

....

}

cout << "www.mylinux.vip" << endl; //不能插入其他语句

catch(double)

{

....

}

在一个try-catch结构中,可以只有try块而无catch块。那么,就捕获捕获到抛出的异常信息。

(3) try和catch块中必须有用花括号括起来的复合语句,即使花括号内只有一个语句,也不能省略花括号。

(4) 一个try-catch结构中只能有一个try块,但却可以有多个catch块,以便与不同的异常信息匹配,如:

try

{ ... }

catch(double)

{ ... }

catch(int)

{ ... }

catch(char)

{ ... }

(5) catch后面的圆括号中,一般只写异常信息的类型名,如:

catch(double)

catch只检查所捕获异常信息的类型,而不检查它们的值,例如,a, b, c都是 double 类型,虽然它们的值不同,但在throw语句中写throw a, throw b 或 throw c,作用均相同。因此,如果需要检测多个不同的异常信息,应当由throw抛出不同类型的异常信息。

异常信息可以是C++系统预定义的标准类型,也可以说用户自定义的类型(如结构体或类)。如果由throw抛出的信息属于该类型或其子类型,则catch与throw二者匹配,catch捕获该异常信息。

catch还可以有另外一种写法,即除了指定类型名之外,还指定变量名,如:

catch (double e)

此时,如果throw抛出的异常信息是double类型的变量a,则catch在捕获异常信息a的同时,还使得d获得a的值,或者说d得到a的一个拷贝。什么时候需要这样做呢?有时候希望在捕获异常信息的时候,还能利用throw抛出的值,如:

catch (double e)

{

cout << "throw err = " << e << endl;

}

这时会输出e的值就是抛出的异常信息,有时希望在catch块中显示该对象中的某些信息。这时就需要在catch的参数中写出变量名(类对象名)。

(6) 如果在catch子句中没有指定异常信息的类型,而用了删节号“…”,则表示它可以捕捉任何类型的异常信息,如:

catch (...)

{

cout << "catch all err" << endl;

}

它能捕获所有类型的异常信息。

这种catch子句应放在try-catch结构中的最后,相当于“其他”。如果把它作为第一个catch子句,则后面的catch子句都不起作用。

(7) try-catch结构可以与throw出现在同一个函数中,也可以不在同一函数中。当throw抛出异常信息之后,首先中本函数中选择与之匹配的catch,如果在本函数中无try-catch结构或找不到与之匹配的catch,就转到其上一层去处理,如果其上一层也无try-catch结构,或找不到与之匹配的catch,则再转到更上一层的try-catch结构去处理,也就是说,总是转到离开出现异常最近的try-catch结构去处理。当最近的处理不了,再往上传递异常。

(8) 在某些情况下,在throw语句中可以不包括表达式,如:

throw;

表示“我不处理这个异常,请上级处理”。此时,它将把当前在处理的异常信息再次抛出,给其上一层的catch块处理。如:

catch(...)

{

.....

throw; //将已捕获的异常信息再次原样抛出,由上一层的catch处理器处理

}

(9) 如果throw抛出的异常信息找不到与之匹配的catch块,那么,系统就会调用一个系统函数terminate,使程序终止运行。

4 try-catch应用

通过前面的学习,我们掌握了try-catch捕获异常的基本方法。但是,C++提供的异常处理机制很完善,可以考虑多种异常的情况。那么,可以总结如下:

(1) 一个函数可以throw抛出多个异常,try-catch可以使用多个catch捕获不同类型的异常。

程序测试代码如下:

程序运行结果如下:

可以看到,在add()函数中throw多个异常信息。然后,在try后面有2个catch语句块。当执行t.add(11)的时候,就在add()函数中执行 throw 12689;语句,抛出12689消息。

此时,马上结束try中的语句块,不再执行接下来的t.add(16);等语句。直接跳转到catch()语句块中。

此时,抛出的12689消息是一个int类型的数值,所以,提交给catch(int e)捕获,捕获一个int类型的消息。

在进行异常处理后,程序并不会自动终止,继续执行catch子句后面的语句。

来源地址:https://blog.csdn.net/feng19870412/article/details/128977250

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++ try-catch语法分析与应用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript Try...Catch 语句与其他错误处理机制比较:优缺点分析

JavaScript Try...Catch 语句是一种用来处理代码中潜在错误的机制。它允许程序员捕获错误,并根据错误的类型采取相应的措施。Try...Catch 语句与其他错误处理机制,如 Throw 语句、Error 对象和 finally 块,都各有优缺点。本文将对这些错误处理机制进行比较,帮助读者更好地理解它们各自的特性和适用场景。
JavaScript Try...Catch 语句与其他错误处理机制比较:优缺点分析
2024-02-08

C语言指针应用实例分析

这篇文章主要讲解了“C语言指针应用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言指针应用实例分析”吧!1、指针是什么指针理解的2个要点:平时口语中说的指针,通常指的是指针变量,
2023-06-30

C语言结构体应用实例分析

这篇文章主要介绍“C语言结构体应用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言结构体应用实例分析”文章能帮助大家解决问题。1、结构体的声明1.1 结构的基础知识结构是一些值的集合,这
2023-06-30

如何分析C/C++ Qt数据库与SqlTableModel组件应用

今天就跟大家聊聊有关如何分析C/C++ Qt数据库与SqlTableModel组件应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。SqlTableModel 组件可以将数据库中的特
2023-06-22

C语言指针综合应用的示例分析

这篇文章将为大家详细讲解有关C语言指针综合应用的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指针是什么?指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简
2023-06-29

C语言的static关键字应用实例分析

这篇文章主要介绍“C语言的static关键字应用实例分析”,在日常操作中,相信很多人在C语言的static关键字应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的static关键字应用实例分析
2023-06-30

C语言指针和数组应用实例分析

这篇文章主要介绍“C语言指针和数组应用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言指针和数组应用实例分析”文章能帮助大家解决问题。一、指针和数组分析-上1.数组的本质数组是一段连续的
2023-06-30

Go语言中interface语法与使用实例分析

这篇“Go语言中interface语法与使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言中interfac
2023-07-02

Go语言编程优势分析与应用指南

Go语言作为一种相对年轻的编程语言,却在近年来迅速崛起,备受程序员们的关注和青睐。它以其简洁的语法、高效的并发机制和出色的性能而闻名于业内。本文将分析Go语言的编程优势,并结合具体的代码示例进行应用指南,帮助读者更好地理解和运用这门语言。
Go语言编程优势分析与应用指南
2024-03-11

C语言数据结构与算法图的遍历分析

这篇文章主要介绍“C语言数据结构与算法图的遍历分析”,在日常操作中,相信很多人在C语言数据结构与算法图的遍历分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言数据结构与算法图的遍历分析”的疑惑有所帮助!
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录