C++中的异常机制

1.异常是什么?

在 C++ 中,异常处理是一种用于处理程序运行时可能发生的错误或异常情况的机制。当某些异常情况发生时,程序可以通过抛出异常来通知调用栈,并且可以通过异常处理代码来捕获和处理这些异常。

2.检测异常的三个步骤

检查 (try) 抛出 (throw) 捕捉 (catch)
try: try  块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。
throw:  当问题出现时,程序会抛出一个异常。这是通过使用  throw 关键字来完成的。(抛出一个异常对象,异常对象可以是基本类型,也可以是类类型
catch:  在您想要处理问题的地方,通过异常处理程序捕获异常。 catch  关键字用于捕获异常。

try...catch语法

try
{
被检查语句
}
catch(异常处理的类型 变量名)
{
进行异常处理的语句;
}

 

例子1:捕捉一个异常 (注意看代码里的注释)

#include<iostream>
using namespace std;
int mydiv(int a,int b)
{if(b==0)//分母为0,说明发生了异常{cout<<"throw....."<<endl;throw b;//抛出一个异常对象,异常对象可以是基本类型,也可以是类类型。}return a/b;
}
int main()
{int a=10;int b=0;try{int result = mydiv(10,0);//因为mydiv函数可能会抛出异常,所以写在try语句块中用来捕捉异常。//如果mydiv抛出异常,会马上终止try语句块//如果mydiv没有抛出异常,会把try语句块执行完cout<<result<<endl;}catch(int e)//在catch中处理try中抛出的异常,catch()中的对象,就是try中抛出的异常对象{cout<<"catch int "<<e<<endl;}
}

 

例子2:捕捉多异常(注意看代码里的注释)

#include <iostream>
using namespace std;
class ExceptA//专门用来表示异常的类
{
public:void show(){cout<<"异常A"<<endl;}
};class ExceptB//专门用来表示异常的类
{
public:void show(){cout<<"异常B"<<endl;}
};int div(int a, int b)
{if(b == 0){ExceptA e;throw e;//抛出异常对象ExceptA 类型}return a/b;
}double div(double a, double b)
{if(b == 0){ExceptB e;throw e;//抛出异常对象ExceptB 类型}return a/b;
}int main()
{try{//同一时刻只能抛出一个异常div(1, 0);//当这里抛出ExceptA 类型异常时,整个try就结束了div(1.0, 0.0);}catch(ExceptA e)//专门用来处理ExceptA 类型异常的catch{e.show();}catch(ExceptB e)//专门用来处理ExceptB 类型异常的catch{e.show();}catch(...)//处理其他类型的异常{cout<<"other e"<<endl;}
}

以上就是C++异常机制的用法了,本次代码分享到此结束,谢谢大家观看,希望大家点点赞,点点关注,后续还会发布有关C++知识,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式锁-redission可重入锁原理

5.3 分布式锁-redission可重入锁原理 在Lock锁中&#xff0c;他是借助于底层的一个voaltile的一个state变量来记录重入的状态的&#xff0c;比如当前没有人持有这把锁&#xff0c;那么state0&#xff0c;假如有人持有这把锁&#xff0c;那么state1&#xff0c;如果持有这把锁的…

DELL VMWare R730 R740 R750 iDRAC配置与ESXI安装部署

VMware vCenter Server与ESXI版本兼容对照表 ESXI下载 VMware vcenter7.0许可证 Esxi7.0许可证 VSAN 7.0许可证 DELL VMWare R730 R740 R750 iDRAC配置与ESXI安装部署 vmware vcenter server 7.0 安装教程 1. 进入BIOS界面配置iDRAC网络 开机按F10&#xff0c;开机点击F10选择…

国家统计局行政区划获取及入库ES实践

我们先看下最终效果&#xff1a; 1. ES索引新建 PUT administrative_division {"mappings": {"properties": {"province": {"type": "keyword"},"province_code": {"type": "keyword"},&q…

docker安装oracle

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

C++从入门到精通——类和对象(中篇)

1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中什么都没有吗&#xff1f;并不是的&#xff0c;任何一个类在我们不写的情况下&#xff0c;都会自动生成下面6个默认成员函数。 class Date {}; 2. 构造函数 2.1 概念 对于以下的日期类&am…

ChatGPT写作攻略:打造精彩论文的秘诀

ChatGPT无限次数:点击直达 ChatGPT写作攻略&#xff1a;打造精彩论文的秘诀 在当今信息爆炸的时代&#xff0c;人们对于高质量且引人入胜的文章需求日益增长。作为一名具有10年经验的CSDN网站原创文章优质创作者&#xff0c;我们不仅要拥有丰富的知识储备和写作技巧&#xff0…

Linux下使用C语言实现高并发服务器

高并发服务器 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 使用多进程并发服务器时要考虑以下几点&#xff1a; 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体…

AI电商图制作解决方案助力企业高效营销

电商行业蓬勃发展&#xff0c;一张吸睛的电商海报或宣传视频往往能够成为企业吸引顾客、提升品牌形象的利器。然而&#xff0c;传统电商图制作流程繁琐&#xff0c;需要投入大量时间和人力资源&#xff0c;成为众多企业面临的难题。为了解决这一问题&#xff0c;美摄科技凭借其…

前端学习之路-项目实战(1)

每日吐槽&#xff1a;有一个奇怪的问题&#xff0c;怎么一眼看出一个求职者是否是培训班出来的&#xff0c;有的求职上写着&#xff0c;希望大家坦诚一点&#xff0c;but&#xff0c;你这艘诚实的泰坦尼克号终究还是撞上了社会阴暗面的冰山&#xff0c;OMG&#xff0c;不让包装…

Leetcode 239. 滑动窗口最大值和Leetcode 347. 前 K 个高频元素

目录标题 Leetcode 239. 滑动窗口最大值题目描述C语言代码和题解解题思路 Leetcode 347. 前 K 个高频元素题目描述C语言题解和思路解题思路 Leetcode 239. 滑动窗口最大值 题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最…

Tensorflow(GPU版本配置)一步到位!!!

Tensorflow&#xff08;GPU版本配置&#xff09;一步到位&#xff01;&#xff01;&#xff01; CUDA安装CUDA配置Tensorflow配置常见的包 CUDA安装 配置了N次的Tensorflow–Gpu版本&#xff0c;完成了踩坑&#xff0c;这里以配置Tensorflow_gpu 2.6.0为例子进行安装 以下为ten…

数学之光照亮AI之路:探究数学背景在人工智能学习中的优势

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已成为引领未来发展的重要力量。然而&#xff0c;对于许多初涉此领域的学习者来说&#xff0c;AI的复杂性和深度常常让他们望而却步。有趣的是&#xff0c;那些数学基础扎实的人在学习AI时&#xff0c;往往…

【canvas】canvas基础使用(六):图形阴影

简言 学习使用canvas的阴影属性。 阴影 shadowBlur 阴影模糊 CanvasRenderingContext2D.shadowBlur 是 Canvas 2D API 描述模糊效果程度的属性&#xff1b;它既不对应像素值也不受当前转换矩阵的影响。默认值是 0。 语法&#xff1a; ctx.shadowBlur level; 选项值&#x…

Python中的错误处理 - 使用try、except、else和finally进行解释,并附带代码示例

最近&#xff0c;我的经理委派我创建一个自动报告。我设计的报告非常简单。它包括一些来自数据库的数字和一些基本的数学运算。我很兴奋最终可以向公司展示我的惊人的Python技能。 我完成并交付了产品。一切都很顺利。至少&#xff0c;直到大约两周后。我的报告由于除以零错误…

Linux使用C语言实现Socket编程

Socket编程 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 网络套接字 socket: &#xff08;电源&#xff09;插座&#xff08;电器上的&#xff09;插口&#xff0c;插孔&#xff0c;管座 在通信过程中, 套接字是成对存在的, 一个客户端的套接字, 一个…

深入探索DBServer:构建高效、可扩展的数据库服务

引言 在当今的数字时代&#xff0c;数据是一切业务和技术解决方案的核心。随着数据量的日益增长&#xff0c;企业和开发者不断寻求高效、可扩展、同时又能保证数据安全性和完整性的数据库管理解决方案。这正是DBServer发挥作用的领域。本文将深入探讨DBServer的概念、特点、如…

重载运算与类型转换

基本概念&#xff1a; 运算符的重载是具有特殊名字的函数&#xff1b;他们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样&#xff0c;重载的匀速阿福也含有返回类型、参数列表以及函数体。重载运算符函数的参数数量和该运算符作用的运算对象数量一样…

PUBG绝地求生更新后无法启动/更新后卡顿?3个解决方法分享

在绝地求生中&#xff0c;团队协作也是非常重要的一点。咱们可以运用strong标签来着重“团队协作”。与队友紧密配合、彼此援助&#xff0c;一起拟定战术和战略&#xff0c;将会大大提高在游戏中获得成功的几率。在绝地求生中获得成功并不简单&#xff0c;但只需咱们把握了一些…

linux的io的知识大全

C语言的io操作 写文件 #include<stdio.h> #include<string.h>#define FILE_NAME "log.txt" int main() {FILE * fp fopen(FILE_NAME, "w");if(fpNULL){printf("fopen error!\n");}const char* msg "hello zk\n";int c…

JS rgb,hex颜色值转换

颜色值转化 rgb颜色值转换为hex颜色值&#xff08;rgb>hex&#xff09; hex颜色值转换为rgb颜色值&#xff08;hex>rgb&#xff09; 代码&#xff1a; const hex2Rgb (hex) > {return rgb(${parseInt(hex.slice(1, 3), 16)},${parseInt(hex.slice(3, 5), 16)},${p…