在C++中通过多个catch子句捕获不同异常类型,如int、double或自定义异常,按顺序匹配处理,确保每种异常被正确响应。

在C++中,捕获多个异常可以通过在try-catch块中使用多个catch子句来实现。每个catch子句可以处理不同类型的异常,程序会按照它们出现的顺序依次匹配异常类型。
按异常类型分别捕获
你可以为每种可能抛出的异常类型编写独立的catch块。例如,一个函数可能抛出int、double或自定义类异常:
try { // 可能抛出异常的代码 throw 42; // 抛出 int // throw std::runtime_error("error"); // 或抛出标准异常}catch (int e) { std::cout << "捕获到整型异常: " << e << std::endl;}catch (double e) { std::cout << "捕获到浮点型异常: " << e << std::endl;}catch (const std::exception& e) { std::cout << "标准异常: " << e.what() << std::endl;}catch (...) { std::cout << "捕获到未知异常" << std::endl;}
注意:异常匹配遵循从上到下的顺序,因此更具体的异常应放在前面,避免被泛化的catch(...)提前捕获。
捕获自定义异常类
如果你定义了多个自定义异常类,可以通过继承std::exception并分别捕获:
立即学习“C++免费学习笔记(深入)”;
struct MyException1 : public std::exception { const char* what() const noexcept override { return "MyException1"; }};struct MyException2 : public std::exception {const char* what() const noexcept override { return "MyException2"; }};
try {throw MyException1();}catch (const MyException1& e) {std::cout << "处理 MyException1: " << e.what() << std::endl;}catch (const MyException2& e) {std::cout << "处理 MyException2: " << e.what() << std::endl;}
使用 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++多异常捕获方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478007.html
微信扫一扫
支付宝扫一扫