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

相关推荐
蚊子爱喝水5 分钟前
高性能多线程 PHP 图像处理库 PHP-VIPS:颠覆你对图像处理的认知
开发语言·图像处理·php
ajassi200013 分钟前
开源 C++ QT Widget 开发(九)图表--仪表盘
linux·c++·qt·开源
火山kim16 分钟前
一文速通liunx命令
java·linux·运维·服务器
long_run28 分钟前
C++之常用容器
c++
水饺编程1 小时前
Windows 命令行:cd 命令1,cd 命令的简单使用
c语言·c++·windows·visual studio
一枝小雨1 小时前
【C++】深入解析C++嵌套依赖类型与typename关键字
开发语言·c++·笔记·学习笔记
水饺编程1 小时前
Windows 命令行:父目录与子目录
c语言·c++·windows·visual studio
Orchestrator_me1 小时前
centos目录大小查看与清理
linux·运维·centos
小彭努力中1 小时前
164.在 Vue3 中使用 OpenLayers 加载 Esri 地图(多种形式)
开发语言·前端·javascript·vue.js·arcgis
ftpeak1 小时前
Rust SQLx 开发指南:利用 Tokio 进行性能优化
开发语言·oracle·性能优化·rust·个人开发