用“火灾警报”理解C++异常处理——从触发到救援的完整流程


一、异常是什么?现实版类比

想象你在写字楼里办公:

  • 正常流程:上班→工作→下班→回家(程序正常执行)
  • 突发火灾:触发警报→疏散→消防队灭火(程序抛出异常→捕获处理)

C++异常的本质:当程序遇到无法继续执行的严重错误(比如文件打不开、内存不足、除零错误),立刻“拉响警报”,中断当前流程,跳转到专门的“应急预案”(catch块)处理问题!


二、异常处理三板斧:throwtrycatch

1. 触发警报:throw
// 发现火情(错误)时,立刻抛异常
void openFile(const string& filename) {
   
    ifstream file(filename);
    if (!file.is_open()) {
   
        throw runtime_error("文件打不开!文件名:" + filename);
    }
    // ...正常操作
}
2. 监控区域:try
try {
   
    // 重点监控区域(可能着火的区域)
    openFile("秘密数据.txt");
    // ...其他操作
}
3. 应急小组:catch
catch (const runtime_error& e) {
   
    // 消防队灭火(处理文件打不开的情况)
    cerr << "错误:" << e.what() << endl;
    // 记录日志、尝试备用文件...
}
catch (...) {
    // 捕获所有未知异常(防漏网之鱼)
    cerr << "未知错误!启动紧急预案" << endl;
}

三、异常的分类:你需要不同的“灭火器”

1. 标准异常(C++自带的灭火器)
异常类 用途 示例场景
std::runtime_error 运行时无法预料的错误 文件不存在、网络断开
std::logic_error 程序逻辑错误 传入非法参数、越界访问
std::bad_alloc 内存分配失败 new操作失败
//使用
throw runtime_error("发生错误了!!");

try {
   
        func(a);   //可能发生异常的语句
    } catch (const std::runtime_error& e) {
    			//抛出运行时异常
        cerr << "Runtime error: " << e.what() << endl;
	}
//使用e.what()可以获取异常信息:  "发生错误了!!"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值