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

在C++中,捕获多个异常可以通过在try-catch块中使用多个catch子句来实现。每个catch子句可以处理不同类型的异常,程序会按照它们出现的顺序依次匹配异常类型。
你可以为每种可能抛出的异常类型编写独立的catch块。例如,一个函数可能抛出int、double或自定义类异常:
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++免费学习笔记(深入)”;
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 (...) {
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++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号