try/catch/throw 简明指南

⚡ 为什么需要异常处理?

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

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

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

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

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

相关推荐
Lazionr19 分钟前
模板进阶:深入理解模板机制
c++·windows
豆沙沙包?7 小时前
C++~~~stack容器、queue容器、list容器(p45-P56)
c++·windows·list
Data_Journal7 小时前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
豆角焖肉8 小时前
SSM 聚合项目搭建:多 Maven 模块项目
开发语言·python·pycharm
Frank_refuel8 小时前
【C++八股】面向对象
开发语言·c++
h_a_o777oah8 小时前
【图论】Tarjan 缩点:解决有向图中环的问题
c++·算法·图论·acm·强连通分量·缩点·tarjan
m0_380743879 小时前
为 OpenAI 兼容接口配置教程
开发语言·python·node.js
M78佐菲9 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
万邦科技Lafite9 小时前
阿里巴巴拍立淘按图搜索商品API返回值实践:提升用户购物满意度的关键措施
开发语言·api·开放api·电商开放平台·京东开放平台
别动我齐刘海10 小时前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶