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

发布时间:2026/9/28 9:53:55

小学生学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/8/27 20:13:22

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

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

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

2026/8/30 9:23:41

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

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

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

2026/9/24 15:04:16

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

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…