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++学习一站式分享

相关推荐
luck_bor2 分钟前
Lambda表达式 算法异常
java·开发语言
lsx2024062 分钟前
SOAP Envelope 元素
开发语言
范范@4 分钟前
day2-python基础语法
开发语言·python
qq_2518364575 分钟前
基于java 私厨美食共享平台系统设计与实现(有源码)
java·开发语言·美食
ZPC82106 分钟前
规划后的轨迹,如何发给 moveit_servo 执行
c++·人工智能·算法·3d
杜子不疼.6 分钟前
【C++ 在线五子棋对战】 - 工具类模块实现
开发语言·c++
青梅橘子皮10 分钟前
Linux---开发工具(1)(vim,gcc/g++)
linux·运维·服务器
邮专薛之谦10 分钟前
Linux常用指令大全(完整版)
linux·运维·服务器
夏至春来-美美14 分钟前
python 使用pytest的ini配置
开发语言·python·pytest
geovindu19 分钟前
python: Mutex Pattern
开发语言·python·设计模式·互斥锁模式