首页 > 后端开发 > C++ > 正文

c++中如何捕获多个异常_c++多异常捕获方法

冰火之心
发布: 2025-10-08 09:16:01
原创
532人浏览过
在C++中通过多个catch子句捕获不同异常类型,如int、double或自定义异常,按顺序匹配处理,确保每种异常被正确响应。

c++中如何捕获多个异常_c++多异常捕获方法

在C++中,捕获多个异常可以通过在try-catch块中使用多个catch子句来实现。每个catch子句可以处理不同类型的异常,程序会按照它们出现的顺序依次匹配异常类型。

按异常类型分别捕获

你可以为每种可能抛出的异常类型编写独立的catch块。例如,一个函数可能抛出intdouble或自定义类异常:

try {
    // 可能抛出异常的代码
    throw 42;        // 抛出 int
    // throw std::runtime_error("error");  // 或抛出标准异常
}
catch (int e) {
    <strong>std::cout << "捕获到整型异常: " << e << std::endl;</strong>
}
catch (double e) {
    <strong>std::cout << "捕获到浮点型异常: " << e << std::endl;</strong>
}
catch (const std::exception& e) {
    <strong>std::cout << "标准异常: " << e.what() << std::endl;</strong>
}
catch (...) {
    <strong>std::cout << "捕获到未知异常" << std::endl;</strong>
}
登录后复制

注意:异常匹配遵循从上到下的顺序,因此更具体的异常应放在前面,避免被泛化的catch(...)提前捕获。

捕获自定义异常类

如果你定义了多个自定义异常类,可以通过继承std::exception并分别捕获:

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

千面视频动捕
千面视频动捕

千面视频动捕是一个AI视频动捕解决方案,专注于将视频中的人体关节二维信息转化为三维模型动作。

千面视频动捕 27
查看详情 千面视频动捕
struct MyException1 : public std::exception {
    const char* what() const noexcept override { return "MyException1"; }
};
<p>struct MyException2 : public std::exception {
const char* what() const noexcept override { return "MyException2"; }
};</p><p>try {
throw MyException1();
}
catch (const MyException1& e) {
<strong>std::cout << "处理 MyException1: " << e.what() << std::endl;</strong>
}
catch (const MyException2& e) {
<strong>std::cout << "处理 MyException2: " << e.what() << std::endl;</strong>
}</p>
登录后复制

使用 catch(...) 捕获所有异常

catch(...)可以捕获任何类型的异常,通常作为最后的兜底处理:

catch (...) {
    std::cout << "发生未预期的异常" << std::endl;
    // 可在此记录日志或清理资源
}
登录后复制

但无法获取异常的具体信息,因此建议仅用于确保程序不崩溃或重新抛出。

重新抛出异常

在捕获异常后,若需交由上级处理,可使用throw;重新抛出:

catch (const std::exception& e) {
    std::cout << "日志记录: " << e.what() << std::endl;
    throw;  // 保持原始异常类型和栈状态
}
登录后复制

基本上就这些。合理组织多个catch块,结合标准异常、自定义异常与catch(...),就能有效处理C++中的多异常场景。

以上就是c++++中如何捕获多个异常_c++多异常捕获方法的详细内容,更多请关注php中文网其它相关文章!

相关标签:
c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号