C++-异常处理

1、概念

异常时程序在执行期间产生的问题。C++异常是指在程序运行时发生的特殊情况。比如string::at函数下标越界等。

异常提供了一种转移程序控制权的方式。

一旦程序出现异常没有经过处理,就会造成程序运行崩溃。

处理异常的方式有:抛出异常(throw)和捕获异常(try - catch)

2、抛出异常-throw语句

可以使用throw语句在代码块中的任何地方抛出异常。

throw语句的操作数可以是任意的表达式,表达式的结果的类型决定了抛出异常的类型。

抛出的异常是抛出到函数调用的上一级。

#include <iostream>using namespace std;// 除法
double division(double a,double b)
{if(== 0){string text("除数等于0!");throw text;//抛出一个异常:异常为除数为0}return a/b;
}
double input()
{
    cout << "input 开始执行" << endl;double a;double b;
    cout << "请输入两个浮点型:" << endl;
    cin >> a >> b;double c = division(a,b);   // 1 text对象在这(无人处理)
    cout << "input 执行结束" << endl;return c;
}int main()
{
    cout << "程序开始执行" << endl;
    cout << input() << endl;    // 2 text对象又到这了(还是无人处理)
    cout << "程序执行结束" << endl;return 0;
}

3、捕获异常

如果有一个try代码块抛出一个异常,捕获异常使用catch代码块。

#include <iostream>
using namespace std;
// 除法
double division(double a,double b)
{if(== 0){string text("除数等于0!");throw text; // 抛出一个异常}return a/b;
}
double input()
{
    cout << "input 开始执行" << endl;double a;double b;
    cout << "请输入两个浮点型:" << endl;
    cin >> a >> b;double c = 0;try // 尝试抛出一个异常{
        c = division(a,b);}catch(string &e)    // 尝试捕获一个异常(类型跟抛出的异常类型不符合,会出现捕获不到的情况)//catch(...)//捕获所有异常{// 验证异常类型对象
        cout << e << endl;// 补救措施return 0;}
    cout << "input 执行结束" << endl;return c;
}
int main()
{
    cout << "程序开始执行" << endl;
    cout << input() << endl;    // 2 text对象又到这了(还是无人处理)
    cout << "程序执行结束" << endl;return 0;
}

上述代码中可能会出现的几种情况:

  1. 无异常抛出,此时程序正常执行,不进入catch块。
  2. 异常抛出,正确捕获,此时程序进入catch块。
  3. 异常抛出,错误捕获(捕获类型不对),此时程序仍然会向上抛出寻求正确捕获,如果每一层都没有正确捕获,程序任然运行终止。
  4. 4、标准异常体系

#include<stdexcept>头文件

C++给常见的异常类型进行了定义和分类,引入#include<stdexcept>头文件后可以使用。

这个体系还是太薄弱了,因此可以对其进行拓展。

自定义一个类型,继承自某个异常类型即可。

一个标注捕获的例子:

#include <iostream>
#include <stdexcept>
using namespace std;
int main()
{string s = "helloworld";try{
        cout << s.at(100) << endl;//异常,下标越界}catch(out_of_range &e){// 输出错误信息
        cout << e.what() << endl;// 补救措施
        cout << -1 << endl;}return 0;
}

一个抛出自定义异常的例子:

#include <iostream>
#include <stdexcept>
using namespace std;
// 继承于exception
class MyException:public exception
{
public:// 覆盖what函数// throw():异常规格说明// 表示此函数不会出现任何异常的抛出const char* what() const throw(){return "自定义异常类型" ;}
};
void show(string a,string b)
{if(== "#" || b == "#"){throw MyException();}
    cout << a << b << endl;
}
int main()
{
    cout << "请输入两个字符串" << endl;string a;string b;
    cin >> a >> b;try{show(a,b);}catch(MyException &e){
        cout << e.what() << endl;}
    cout << a << b << endl;return 0;
}

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

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

相关文章

Python基础(十九、文件操作写入与追加)

文章目录 一、文件的写入&#xff08;使用 "w" 模式&#xff09;二、文件的追加&#xff08;使用 "a" 模式&#xff09;三、文件备份案例接之前的答案 在 Python 中&#xff0c;open() 是一个内置函数&#xff0c;用于打开文件并返回文件对象。它是处理文件…

助力实体店数字化升级,VR智慧门店打造线上逛店体验

近年来&#xff0c;传统实体店业绩增长过于缓慢&#xff0c;实体门店的销售疲态十分明显&#xff0c;甚至于部分城市已经出现大量线下实体店开始关门的现象&#xff0c;因此顺应实体零售数字化升级趋势已经刻不容缓。越来越多的实体门店开始意识到这个问题&#xff0c;并逐步开…

cad快速看图软件免费版(手机在线cad快速看图)

cad快速看图软件免费版(手机在线cad快速看图) 很多机械设计师日常工作过程中涉及到多种格式的cad图纸&#xff0c;cad图纸大多都需要cad设计软件才能打开&#xff0c;然而很多小伙伴并没有下载相应的cad设计软件&#xff0c;这种情况下如何进行cad快速看图呢&#xff1f; 今天…

一文弄懂vue中样式穿透v-deep

1. 前言 在vue3的世界里&#xff0c;有一个style标签的关键字v-deep&#xff0c;官网称之为样式穿透。那他究竟是什么原理呢&#xff1f;又是怎么工作的呢&#xff1f;让我们一起探究一下。 2. 准备工作 需要实现搭建一个vue3的环境&#xff0c;我这里使用的是vitevue3的架构…

使用JavaScript制作一个简单的天气应用

随着Web开发技术的不断发展&#xff0c;JavaScript已经成为前端开发中不可或缺的一部分。它不仅可以用于创建动态和交互式的用户界面&#xff0c;还可以用于处理各种复杂的任务&#xff0c;如数据验证、动态内容更新、实时通信等。以下是一个使用JavaScript来创建一个简单天气应…

【OJ】单链表刷题

力扣刷题 1. 反转链表&#xff08;206&#xff09;1.1 题目描述1.2 题目分析1.2.1 头插法1.2.2 箭头反转 1.3 题目代码1.3.1 头插入1.3.2 箭头反转 2.合并两个有序链表&#xff08;21&#xff09;2.1 题目描述2.2 题目分析2.3 题目代码 1. 反转链表&#xff08;206&#xff09;…

视频转音频软件哪个好? 11 个高效的视频转音频转换器分享

网络上拥有数百个值得观看和聆听的音乐视频。但要聆听喜爱的音乐&#xff0c;用户必须观看整个视频&#xff0c;即使只有音乐让他们兴奋。那么&#xff0c;如何从视频中提取音频呢&#xff1f;简单的答案是使用视频到音频转换器将视频转换为音频格式并将其保存在您的设备上以供…

gflags.exe 工具入门详解

gflags.exe 是 Windows 平台上的一个调试工具&#xff0c;它来自 Microsoft Debugging Tools for Windows 工具集。gflags&#xff08;全局标志&#xff09;主要用于设置和管理针对特定进程或系统的调试选项以及性能监视特性。这个工具可以帮助开发者对程序进行更深入的故障排查…

【读书】《白帽子讲web安全》个人笔记Ⅰ-1

目录 前言&#xff1a; 第1章 我的安全世界观 1.1 Web安全简史 1.1.1中国黑客简史 1.1.2黑客技术的发展历程 1.1.3web安全的兴起 1.2黑帽子&#xff0c;白帽子 1.3返璞归真&#xff0c;揭秘安全的本质 1.4破除迷信&#xff0c;没有银弹 1.5安全三要素 1.6如何实施安…

使用pymysql框架连接和查询MySQL数据库

使用pymysql框架连接和查询MySQL数据库步骤&#xff1a; 前提&#xff1a;安装并import pymysql模块 1、使用 pymysql.connect&#xff08;&#xff09;函数创建一个数据库连接对象 2、正确填写数据库配置信息&#xff0c;地址、端口、用户名、密码、数据库名称 3、创建游标…

微服务-sentinel-基本案例,持久化

sentinel 功能 限流 限流文档 直接拒绝&#xff1a;触发阀值直接抛弃。冷启动&#xff1a;在一段时间内针对突发流量缓慢增长处理数量。 3&#xff09;匀速器&#xff1a;请求以均匀的速度通过。 降级降级文档 1&#xff09;RT 统计时间内&#xff0c;大于预设请求数量&…

MySQL数据库的查询操作

MySQL单表查询 字段解析字段名字段类型雇员编号idint雇员姓名namevarchar(30)雇员性别sexenum雇用时期hire_datedate雇员职位postvarchar(50)职位描述job_descriptionvarchar(100)雇员薪水salarydouble(15,2)办公室officeint部门编号dep_idint #创表 CREATE TABLE company.em…

架构(1)

目录 1.如何理解架构的演进&#xff1f; 2.如何理解架构的服务化趋势&#xff1f; 3.架构中有哪些技术点&#xff1f; 4.谈谈架构中的缓存应用&#xff1f; 5.在开发中缓存具体如何实现&#xff1f; 1.如何理解架构的演进&#xff1f; 初始阶段的网站架构应用服务和数据服…

tcl 基础

exec catch file mkdir

【QT】QStandardItemModel类的应用介绍

目录 1 概述 2 常用方法 3 QStandardItemModel的使用 3.1 界面设计与主窗口类定义 3.2 系统初始化 3.3 从文本文件导入数据 3.4 数据修改 3.5 单元格格式设置 3.6 数据另存为文件 1 概述 QStandardItemModel是标准的以项数据&#xff08;itemdata&#xff09;为基础的…

【管理篇 / 恢复】❀ 08. 文件权限对macOS下用命令刷新固件的影响 ❀ FortiGate 防火墙

【简介】虽然上篇文章中成功的在macOS下刷新了固件&#xff0c;但是很多小伙伴在实际操作中碰到了无法成功的状况&#xff0c;我们来看看最常见的一种。 在/private/tftpboot目录拷贝另一个版本的固件文件&#xff0c;具体拷贝过程不再详述。 打开终端&#xff0c;输入命令 sud…

Do you know about domestic CPUs

Do you know about domestic CPUs CPU指令集国产CPU CPU指令集 国产CPU 参考文献 国产CPU之4种架构和6大品牌指令集及架构一文深入了解 CPU 的型号、代际架构与微架构国产GPU芯片厂商有哪些深入GPU硬件架构及运行机制详解服务器GPU架构和基础知识

编写一个弹跳小球的程序,小球在窗口中四处反弹(python)

import pygame import random# 初始化Pygame pygame.init()# 窗口尺寸 width 800 height 600# 创建窗口 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Bouncing Ball")# 小球初始位置和速度 ball_radius 20 ball_color (255, …

TCP和UDP的区别是什么

TCP和UDP是互联网协议中两个重要传输层协议。 一、工作原理 1.1 TCP TCP是一种面向连接的协议&#xff0c;通过三次握手建立可靠的连接。发送端将数据分割成多个TCP段&#xff0c;并通过IP进行传输。接收端接收到TCP后进行重组&#xff0c;并通过确认机制确保数据的可靠性。…

HUAWEI华为荣耀MagicBook X 15酷睿i5-10210U处理器集显(BBR-WAH9)笔记本电脑原装出厂Windows10系统

链接&#xff1a;https://pan.baidu.com/s/1YVcnOP5YKfFOoLt0z706rg?pwdfwp0 提取码&#xff1a;fwp0 MagicBook荣耀原厂Win10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、华为/荣耀电脑管家等预装程序 文件格式&#xff1a;esd/wim/swm 安装…