讲师中心 微信公众号
AI工具推荐 视频效率加速

C++异常处理try catch throw详解_C++标准异常类的继承体系

轻宇大大_4918

轻宇大大_4918

发布时间:2025-12-08 21:46:02

|

252人浏览过

|

来源于php中文网

原创

C++异常处理通过try、catch、throw实现,用于捕获和处理运行时错误。try块中抛出异常,由匹配的catch块捕获,推荐按const引用捕获以避免切片。标准异常继承自std::exception,如logic_error和runtime_error及其子类。最佳实践包括使用RAII、自定义异常继承标准类并重写what(),合理记录或重新抛出异常,提升程序健壮性。

c++异常处理try catch throw详解_c++标准异常类的继承体系

在C++中,异常处理是一种用于应对程序运行时错误的机制。通过 trycatchthrow 关键字,开发者可以优雅地处理错误情况,避免程序崩溃,并提升代码的健壮性。

try、catch、throw 基本用法

当程序可能发生错误时,将相关代码放在 try 块中。如果在 try 块中检测到异常,使用 throw 抛出一个异常对象。随后,系统会查找匹配的 catch 块来处理该异常。

基本语法如下:

try {
    // 可能抛出异常的代码
    if (error) throw exception_object;
}
catch (ExceptionType1 e) {
    // 处理某种类型的异常
}
catch (ExceptionType2& e) {
    // 更推荐按引用捕获,避免拷贝和切片
}
catch (...) {
    // 捕获所有未被前面 catch 捕获的异常
}

示例:

立即学习C++免费学习笔记(深入)”;

#include <iostream>
using namespace std;

int main() {
    try {
        throw runtime_error("发生了一个运行时错误");
    }
    catch (const runtime_error& e) {
        cout << "捕获异常: " << e.what() << endl;
    }
    return 0;
}

输出:

捕获异常: 发生了一个运行时错误

C++标准异常类的继承体系

C++标准库定义了一套异常类体系,位于 头文件中。这些类以多态方式组织,形成一个继承结构,便于统一处理。

Upload audio to AIOZ Stream
Upload audio to AIOZ Stream

快速上传音频至 AIOZ Stream API。支持默认或自定义编码配置创建音频对象,上传文件并完成处理后返回音频链接。

下载

核心类是 std::exception,它是所有标准异常类的基类。它提供了一个虚函数 what(),返回描述异常的 C 风格字符串(const char*)。

主要的派生类包括:

  • std::logic_error:表示程序逻辑错误,通常可以在运行前发现的错误。
  • std::runtime_error:表示运行时错误,无法在编译期预测的错误。

常见子类:

  • logic_error 的派生类:
    • invalid_argument:参数无效,如 stoi("abc")
    • domain_error:参数超出数学定义域
    • length_error:试图创建过长的 string
    • out_of_range:访问越界,如 vector.at() 越界
    • future_error:与 std::future 相关的错误
  • runtime_error 的派生类:
    • range_error:计算结果超出范围
    • overflow_error:算术溢出
    • underflow_error:算术下溢

继承关系大致如下:

std::exception
├── std::logic_error
│   ├── std::invalid_argument
│   ├── std::domain_error
│   ├── std::length_error
│   ├── std::out_of_range
│   └── std::future_error
└── std::runtime_error
    ├── std::range_error
    ├── std::overflow_error
    └── std::underflow_error

异常处理的最佳实践

合理使用异常能提高代码可读性和安全性。以下是一些实用建议:

  • 优先按 const 引用 捕获异常,避免对象切片和不必要的拷贝。
  • 不要捕获所有异常后不做处理,至少应记录日志或重新抛出。
  • 自定义异常类时,建议从 std::exception 或其子类派生,并重写 what() 函数。
  • 谨慎使用 throw; 重新抛出当前异常,适用于局部处理后再交由上层处理。
  • RAII(资源获取即初始化)与异常结合使用,确保资源正确释放。

小结

掌握 try-catch-throw 机制和标准异常体系,有助于编写更稳定、易维护的 C++ 程序。理解异常类的层次结构,能帮助你选择合适的异常类型,也能写出更具针对性的 catch 分支。基本上就这些,不复杂但容易忽略细节。

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5159

2023.08.02

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

315

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

315

2025.11.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

1918

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1538

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2224

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5724

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

4789

2023.11.24

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn