当前位置: 首页 > ops >正文

try/catch/throw 简明指南

⚡ 为什么需要异常处理?

当函数遇到无法处理的错误时(如除零、文件不存在),传统返回错误码的方式需要逐层检查,导致代码耦合。异常处理允许错误直接"跳转"到处理模块:

double safeDivide(double a, double b) {if (b == 0) throw std::runtime_error("除数不能为0"); // 抛出return a / b;
}

🔍 核心三件套使用
1. throw - 抛出异常
  • 可抛出任意类型(但推荐标准异常类
throw 42;                        // 基本类型(不推荐)
throw std::out_of_range("索引越界"); // 标准异常类✅
2. try/catch - 捕获并处理
  • catch按顺序匹配类型,支持常量引用捕获
try {safeDivide(10, 0);
}
catch (const std::runtime_error& e) { // 引用捕获避免拷贝std::cout << "数学错误: " << e.what() << std::endl;
}
catch (...) { // 兜底捕获所有异常std::cout << "未知错误" << std::endl;
}

🚫 常见陷阱规避
  1. 避免捕获基类在前
catch (const std::exception& e) { /*...*/ }  // 捕获所有派生类
catch (const std::runtime_error& e) { ... } // ❌ 永远不会被执行!
  1. 不要忽略异常
    catch块会导致静默失败:
try { /* 可能出错的操作 */ }
catch (...) {} // ❌ 危险!隐藏了错误

推荐:C++学习一站式分享

http://www.xdnf.cn/news/17385.html

相关文章:

  • 零拷贝技术:提升传统I/O的性能
  • 理解协议最大传输单元(MTU)和TCP 最大报文段长度(MSS)
  • 【ros_humble】3.人脸检测python(服务通讯和参数通讯介绍)
  • jenkins-飞书通知机制
  • mac安装node.js
  • 前端懒加载技术全面解析
  • Yi大模型-零一万物发布的开源大模型
  • [FOC电机控制]霍尔传感器于角度问题
  • Docker容器部署Tomcat线上商城
  • golang的二维数组
  • AI工具在数据质量管理中的应用
  • windows10 ubuntu 24.04 双系统 安装教程
  • Ubuntu和Windows系统Kafka配置方法
  • Linux的软件防火墙iptables
  • 机器翻译实战:使用Gensim训练中英文词向量模型及可视化
  • QML开发:高级布局组件
  • 【Python 语法糖小火锅 · 第 1 涮】
  • 论文阅读 2025-8-3 [FaceXformer, RadGPT , Uni-CoT]
  • 矩阵的条件数 向量的条件数
  • 大疆上云之SRS视频流服务配置
  • “黑影御剑飞行”视频引发的思考
  • 人类语义认知统一模型:融合脑科学与AI的突破
  • Linux网络子系统架构分析
  • Linux网络编程:TCP的远程多线程命令执行
  • 商品、股指及ETF期权五档盘口Tick级与分钟级历史行情数据多维解析
  • 元数据管理与数据治理平台:Apache Atlas 词汇表 Glossary
  • DeepPHY Benchmarking Agentic VLMs on Physical Reasoning
  • QML 鼠标穿透
  • dokcer 容器里面安装vim 编辑器
  • 【lucene】HitsThresholdChecker命中阈值检测器