小学生学C++编程语法知识(C++异常处理(Exception)入门)

发布时间:2026/7/16 1:19:33

小学生学C++编程语法知识(C++异常处理(Exception)入门)
魔法城堡里的警报器——C异常处理Exception入门一、故事开始程序王国的危险按钮1、在程序王国里小Q是一名魔法程序员。一天国王交给他一个任务请写一个计算除法的程序小Q很快写出了程序cout 10 / 2;运行5成功2、可是国王又说如果有人输入0呢例如cout 10 / 0;3、这时候……程序王国突然响起了警报轰 程序崩溃4、因为任何数字都不能除以0所以程序出现了严重错误。二、有没有办法提前报警1、现实生活中电影院失火怎么办有火警报警器灭火器安全出口2、程序也是一样。如果发生危险不要让程序直接崩溃而是先发现危险再进行处理。这就是——异常处理ExceptionException意思就是程序运行过程中发生了意外。3、例如除以0文件打不开数组越界有些情况内存不足这些都叫异常Exception三、异常处理三兄弟1、C异常处理只有三个关键词。try throw catch就像消防队一样。2、第一位try1意思这里可能发生危险请盯着。2例如try { cout 10 / x; }3try里面放可能发生错误的代码。3、第二位throw1意思危险危险快报警2例如throw Zero Error;程序立即停止当前工作。跳出去找救援人员。4、第三位catch1意思收到报警我来处理。2例如catch(const char* msg) { cout msg; }catch负责接住异常。3所以throw ↓ catchthrow抛出去catch接住4是不是像扔球一样throw ○ catch \o/四、完整流程1、例如try { if(y0) throw Zero Error; coutx/y; } catch(const char* msg) { coutmsg; }2、整个流程进入try ↓ y是不是0 ↓ 不是 ↓ 继续运行 ↓ 结束 ------------------- 如果是0 ↓ throw ↓ 跳出try ↓ 进入catch ↓ 输出错误信息五、GESP真题讲解1、题目try { int x 10, y 0; if (y 0) throw Zero Error; cout x / y; } catch (int e) { cout Error Code: e; } catch (const char* msg) { cout Caught: msg; }问输出什么2、第一步x10 y03、第二步执行if(y0)成立。于是throw Zero Error;4、这里抛出的是什么注意Zero Error是字符串。类型const char*不是int5、第三步程序开始寻找有没有能接住const char*的catch。1第一个catch(int e)接不了。继续找。2第二个catch(const char* msg)完全匹配进入。执行coutCaught: msg;msg就是Zero Error所以输出Caught: Zero Error六、如果没有catch呢1、例如try { throw Error; }没有catch(...)那么程序直接结束。2、程序会发现有人把异常扔出来了throw但是没有任何人接catch1于是程序会调用一个系统函数std::terminate()程序就在这里结束了。2很多编译器会看到类似的信息terminate called after throwing an instance of ...或者terminate called after throwing ...不同编译器提示略有不同。3、这算不算程序崩溃1它并不是程序因为内存错误、野指针等原因崩溃Crash。而是程序因为未处理的异常Unhandled Exception被系统终止Terminate了。2也就是说throw ↓ 没有任何catch ↓ std::terminate() ↓ 程序结束3所以准确的说法应该是程序因为异常没有被处理而终止运行。七、GESP真题讲解1、题目int divi(int a,int b) { if(b0) throw 0; return a/b; } int main() { try { coutdivi(10,0); } catch(const char* msg) { coutA; } catch(int) { coutB; } }1第一步进入divi(10,0)b0于是throw 0;注意抛出的是什么0它是什么类型int不是字符串。2开始找catch。第一个catch(const char*)接不了。第二个catch(int)成功3执行coutB;输出B八、GESP真题讲解1、程序int divide(int a,int b) { if(b0) throw Division by zero; return a/b; } int main() { int result0; try { resultdivide(10,0); coutA; } catch(const char* msg) { coutB; result-1; } coutresult; }2、第一步执行divide(10,0)b0于是throw Division by zero;3、注意一旦throw发生。后面的coutA;不会执行很多同学最容易错这里。程序已经跳出try。4、进入catch(const char*)输出B然后result-1;最后coutresult;输出-1所以最终B-1答案B九、为什么 throw 后面的代码不执行1、例如cout开始; throw 1; cout结束;很多同学以为开始 结束其实不是。2、执行到throw程序立刻跳走。所以开始结束。后面的全部跳过。3、可以理解成throw ↓ 立刻跳到catch十、异常处理完整模板最经典写法try { //可能发生危险 } catch(int x) { //处理int异常 } catch(const char* msg) { //处理字符串异常 }如果可能抛出多种异常就可以写多个catch。十一、万能接收器1、如果不知道会抛出什么类型。可以写catch(...) { cout发生未知错误; }三个点...表示什么异常都接2、例如try { throw 3.14; } catch(...) { cout万能接收; }输出万能接收十二、异常处理流程图程序开始 │ ▼ try │ ▼ 有没有异常 │ │ 没有 有 │ │ ▼ ▼ 继续执行 throw │ │ ▼ ▼ 结束 找catch │ 找到──────┐ │ │ 是 否 │ │ ▼ ▼ 执行catch 程序终止 │ ▼ 继续执行后面的代码十三、记忆口诀try 看守危险区throw 报警抛出去catch 接住来处理程序安全不崩溃。十四、课堂练习第一题try { throw 5; } catch(int x) { coutx; }输出答案5第二题try { throw Hello; } catch(int) { coutA; } catch(const char* s) { couts; }输出答案Hello第三题try { coutA; throw 10; coutB; } catch(int) { coutC; }输出分析输出Athrow 10后立即跳转B不会执行进入catch(int)输出C答案AC第四题try { throw Error; } catch(...) { coutOK; }输出答案OK十五、本课总结今天我们认识了 C 的异常处理机制它就像程序里的“安全警报系统”。要记住三个关键词关键字作用可以理解成try放可能出错的代码安全监控区throw抛出异常拉响警报catch捕获并处理异常消防员同时牢记四个重要规律throw抛出的数据类型要与catch的类型匹配。执行到throw后try中后面的代码不会继续执行。如果没有匹配的catch程序通常会终止。catch(...)可以捕获任何类型的异常是一个“万能接收器”。对于 GESP 考试而言最常见的考点就是判断throw抛出的类型判断哪个catch能成功接住异常理解throw后代码是否继续执行判断程序最终的输出结果。只要掌握了这几条规律这类题目就能快速、准确地完成。

相关新闻

三极管与MOS管:从“水龙头”到“电闸门”的实战选型指南

三极管与MOS管:从“水龙头”到“电闸门”的实战选型指南

2026/7/16 1:19:33

1. 从水龙头到电闸门:三极管与MOS管的本质区别我第一次接触电子元件时,老师用了一个特别形象的比喻:三极管就像家里厨房的水龙头,需要你持续用力拧动(电流驱动)才能控制水流大小;而MOS管则像卫生…

【RTOS的硬核内核】从CPU架构出发,彻底搞懂RTOS的调度与移植

【RTOS的硬核内核】从CPU架构出发,彻底搞懂RTOS的调度与移植

2026/7/16 1:19:33

1. RTOS与CPU架构的生死之交第一次接触RTOS时,很多人会疑惑:为什么同样的FreeRTOS代码,在STM32上跑得飞起,换到RISC-V芯片上就各种崩溃?这就像同样的菜谱,用电磁炉和煤气灶做出来的味道完全不同——火候控制…

维特智能上位机核心参数调优实战指南

维特智能上位机核心参数调优实战指南

2026/7/16 1:19:33

1. 维特智能上位机调优前的准备工作在开始参数调优之前,我们需要先做好基础准备工作。就像盖房子需要打地基一样,参数调优也需要先搭建好稳定的工作环境。我遇到过不少开发者一上来就直接修改参数,结果发现系统运行异常,最后不得不…

STM32——硬件I2C通信实战:从寄存器配置到EEPROM读写(学习笔记)

STM32——硬件I2C通信实战:从寄存器配置到EEPROM读写(学习笔记)

2026/7/16 2:39:37

1. 硬件I2C通信基础与STM32实现原理第一次接触STM32的硬件I2C时,我被那些密密麻麻的寄存器配置搞得头晕眼花。后来在调试AT24C02 EEPROM时才发现,只要理解了硬件I2C的工作机制,实际操作起来比软件模拟要稳定得多。硬件I2C本质上是通过STM32内…

零基础学Arcgis(八)| 空间参考:从理论到实战,构建你的地理数据基石

零基础学Arcgis(八)| 空间参考:从理论到实战,构建你的地理数据基石

2026/7/16 2:39:37

1. 空间参考:地理数据的GPS导航系统第一次用ArcGIS画地图时,我把北京天安门和纽约自由女神像的位置标在了同一张图上,结果发现两个地标竟然重叠在了一起——这就是没设置空间参考闹的笑话。空间参考就像地理数据的GPS导航系统,它告…

【嵌入式实战】从零配置DMA:以STM32F4为例详解传输模式与性能优化

【嵌入式实战】从零配置DMA:以STM32F4为例详解传输模式与性能优化

2026/7/16 2:39:37

1. 初识DMA:为什么需要它?第一次接触STM32的DMA功能时,我正被一个ADC多通道采样项目折磨得焦头烂额。当时用轮询方式读取数据,CPU占用率直接飙到80%,整个系统卡得像老式打字机。直到同事扔给我一句"试试DMA吧&quo…

滤波器基础与应用:从原理到工程实践

滤波器基础与应用:从原理到工程实践

2026/7/16 2:39:37

1. 滤波器基础概念与分类逻辑在电子工程和信号处理领域,滤波器就像一位精准的交通警察,负责控制不同频率信号的通行权。我第一次接触滤波器是在大学实验室,当时用示波器观察一个简单的RC电路对正弦波的响应,那种眼见为实的频率选择…

PCIE:从协议到硬件,一份全面的学习路径与资源导航

PCIE:从协议到硬件,一份全面的学习路径与资源导航

2026/7/16 2:39:37

1. PCIE协议基础:从入门到精通的学习路径PCIE(Peripheral Component Interconnect Express)作为现代计算机系统中最重要的高速串行总线标准之一,已经发展到第七代。对于初学者来说,掌握PCIE协议的核心概念是第一步。PC…

ORXCIO_69性能优化框架:智能资源调度与系统加速实战

ORXCIO_69性能优化框架:智能资源调度与系统加速实战

2026/7/16 2:29:36

如果你最近在开发需要处理大量数据或复杂计算的应用程序,可能会遇到一个共同的痛点:系统性能瓶颈。特别是在处理实时数据分析、机器学习推理或高并发业务场景时,传统的优化手段往往效果有限。今天要介绍的 ORXCIO_69 - Energy Boost&#xff…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/16 0:35:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/15 0:26:43

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

2026/7/16 0:09:31

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

跨境电商多语言商品图翻译方案实现

跨境电商多语言商品图翻译方案实现

2026/7/16 0:09:31

一、问题引入对于做跨境电商的卖家来说,多语言商品图的制作一直是令人头疼的环节。当你准备在亚马逊、Shopee、Lazada等多个平台同步上架新品时,首先遇到的就是图片翻译问题。以一位做家居用品的卖家为例,他需要将200张商品图片中的英文文案全…

Windows系统文件d3dx9_36.dll丢失找不到问题解决

Windows系统文件d3dx9_36.dll丢失找不到问题解决

2026/7/16 0:09:31

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…