🛟 异常处理
坐车会系安全带,为的是万一出事故也能兜住人。程序也会「出事故」——除数是 0、打开不存在的文件。异常处理就是程序的安全带:把麻烦接住,不让整个程序摔碎。
考纲知识点:异常处理机制和常用方法
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 四级
- (11)了解异常处理机制,掌握异常处理的常用方法。
📚
先学一学
花 5 分钟读完下面 4 课,再去闯关就不慌啦
1
🤕 异常:程序「生病」了
程序跑着跑着,可能会遇到「意外」:
- ➗拿 0 当除数(10 ÷ 0 没意义)
- 📁想打开一个根本不存在的文件
- 📏数组下标越界,去开不存在的柜子
这些「意外」在 C++ 里叫异常(exception)。如果不处理,程序可能直接崩溃,像汽车撞上护栏没系安全带。
🛡️ 异常处理 = 安全带 / 安全气囊
好的程序会提前想到「万一出错怎么办」,用异常处理把错误接住,让程序继续好好跑,而不是一下全崩。这就像汽车装好安全带和安全气囊——平时用不上,出事时能救命。
💡 口诀:异常 = 程序的意外事故;异常处理 = 安全带,兜住不让程序崩。
2
🫳 try / catch:试一下,接住它
C++ 异常处理最常用的是 try / catch 两兄弟:把「可能出事的代码」放进 try(试试看),一旦出事,控制权立刻跳到 catch(接住它),由 catch 里的代码来处理。
🧪 读代码:try 出事交给 catch
看得懂就好,不用背:
try {
// 这里放可能出错的代码
// 一旦出错,会跳到下面的 catch
} catch (...) {
// 接住异常,处理它,程序不崩
}
// 这里放可能出错的代码
// 一旦出错,会跳到下面的 catch
} catch (...) {
// 接住异常,处理它,程序不崩
}
catch (...) 括号里的 ... 表示「不管什么异常都接住」;也可以写成 catch (int e) 专门接整数类型的信号。
💡 口诀:try = 先试试;出事就跳 catch;catch 一接,程序就稳。
3
🚨 throw:主动喊「出事了!」
有时电脑不会自己发现错,需要程序员主动检查并报告。比如做除法前先看看除数是不是 0,是 0 就用 throw 丢出一个「异常信号」,让 catch 接住:
🧪 读代码:除法前检查除数
看得懂就好,不用背:
int divide(int a, int b) {
if (b == 0)
throw 1; // 主动喊“出事了”
return a / b;
}
int main() {
try {
cout << divide(10, 0);
} catch (int e) {
cout << \"不能除以 0!\";
}
}
if (b == 0)
throw 1; // 主动喊“出事了”
return a / b;
}
int main() {
try {
cout << divide(10, 0);
} catch (int e) {
cout << \"不能除以 0!\";
}
}
b 是 0 时,throw 1 把异常丢给最近的 catch,程序不会崩,会输出 不能除以 0!。
💡 口诀:throw = 打求救电话;try = 在危险区守着;catch = 接电话来救人。
4
🧰 常用方法与行业实际
📋 异常处理常用方法小结
① try / catch:包住可能出错的代码,出错就交给 catch。
② throw:主动发现问题并抛出异常信号。
③ catch (...):不管什么异常都接住的「万能网」。
④ 接住后在 catch 里给出友好提示,而不是让程序直接崩。
② throw:主动发现问题并抛出异常信号。
③ catch (...):不管什么异常都接住的「万能网」。
④ 接住后在 catch 里给出友好提示,而不是让程序直接崩。
💡 口诀:try 守着、throw 喊、catch 接;接住就提示,程序不崩。
🆚 易混对比:普通 if 检查 vs 异常处理
· if 检查:在「同一个地方」发现问题就地解决,适合简单、当场能处理的情况。
· 异常处理:把问题丢给上层统一处理,适合「当前代码不知道该怎么补救,但调用它的人知道」的情况。
两者都重要,小朋友先分清:if 是「自己处理」,异常是「报告上级处理」。
· 异常处理:把问题丢给上层统一处理,适合「当前代码不知道该怎么补救,但调用它的人知道」的情况。
两者都重要,小朋友先分清:if 是「自己处理」,异常是「报告上级处理」。
💡 口诀:if 自己搞定;try-throw-catch 层层上报。
🏦 行业实际:银行系统不能崩
银行的取款程序如果突然崩了,可能造成大麻烦。所以工程师把「查余额、扣钱」这些关键步骤放进 try,一旦网络断了、余额不够,就 catch 住并提示「操作失败,请重试」,程序继续为下一位顾客服务。游戏、网购、导航……处处都靠异常处理兜底。
💡 口诀:越重要的程序越要异常处理;像银行一样,一次出错别让全场停摆。
🎯
闯关小锦囊 · 考点提醒
- 异常 = 程序的意外事故(除数为 0、文件打不开、下标越界等)。
- try:把可能出错的代码包起来先试试;catch:接住异常并处理,程序不崩。
- throw:主动发现问题并抛出异常信号(如除数为 0 时 throw 1)。
- catch (...) 是万能网,什么异常都接。
- if 检查是「自己处理」;异常处理是「上报给 catch 统一处理」;银行等关键程序全靠它兜底。
🎮
学完了?来闯关!
下面 14 个小挑战,点一点就能玩
Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。