异常处理
异常处理
异常即为C++程序开发中出现的一些编译器无法识别的错误(除以0,数组下标越界,内存申请失败)
异常处理就是 C++ 提供的一套捕获并处理运行时错误的机制,核心目的是让程序在遇到错误时不崩溃,而是优雅地处理错误(如提示错误、修正数据、继续运行)。
1.异常的核心定义
首先明确:异常是程序运行过程中出现的意外错误(不是语法错误,语法错误编译阶段就会被发现),比如除数为 0、数组下标越界、申请内存失败、输入数据不符合要求等,这些错误会导致程序崩溃或输出错误结果。
异常处理就是 C++ 提供的一套捕获并处理运行时错误的机制,核心目的是让程序在遇到错误时不崩溃,而是优雅地处理错误(如提示错误、修正数据、继续运行)。
算法竞赛中的异常处理场景
很多竞赛生会误以为「竞赛不用异常处理,直接暴力写代码就行」,但实际竞赛中以下场景会用到异常处理,能有效避免程序因小错误直接爆 0:
输入数据异常:题目要求输入整数,但测试用例混入字符 / 浮点数,导致程序读取失败;
数学运算异常:除数为 0、取模运算中模数为 0、开平方传入负数等;
容器 / 数组访问异常:vector / 数组下标越界(如访问 a [10] 但数组只有 5 个元素);
内存申请异常:竞赛中动态申请大数组(如 new int [100000000])时内存不足;
自定义逻辑异常:如判断选手分数是否在 0-100 之间、图论中判断节点是否存在等。
2. 异常处理的三大关键字
throw
try
catch
三者往往一起使用
核心逻辑:把可能出问题的代码放进try块 → 代码出问题时用throw抛出异常 → 用catch块接住异常并处理,未抛出异常则catch块不执行。
关键字演示
处理除数为0的代码
int main() {
int a;
int b;
cout << "请输入a的值";
cin >> a;
cout << "请输入b的值";
cin >> b;
int c;
try {
if (b == 0) {
throw 0;
}
cout << "a/b=" << a / b;
}
catch (int zero) {
cout << "错误,除数不能为" << zero;
}
}
万能捕获
用来捕获程序员无法预见的错误
catch (...) {
cout << "检测到未知错误,程序继续运行" << endl;
}
多catch的匹配顺序
注意,一定要将万能捕获放在正常捕获的后面,不然可能会先触发万能捕获(部分编译器会直接报错)

浙公网安备 33010602011771号