异常处理

异常处理

异常即为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的匹配顺序

注意,一定要将万能捕获放在正常捕获的后面,不然可能会先触发万能捕获(部分编译器会直接报错)

posted @ 2026-02-06 12:17  努力的小xu  阅读(6)  评论(0)    收藏  举报