有没有办法在 C++ 中捕获所有异常? [复制]
Posted
技术标签:
【中文标题】有没有办法在 C++ 中捕获所有异常? [复制]【英文标题】:Is there a way to catch all exceptions in C++? [duplicate] 【发布时间】:2012-02-27 02:34:40 【问题描述】:可能重复:How can I catch all types of exceptions in one catch block?
在 C++ 中有没有办法捕获所有异常?如果是这样,它的语法是什么?
谢谢
【问题讨论】:
你需要澄清一下;您是指所有异常还是所有未处理异常?毕竟,你可以像 Seth 提到的那样将入口点包装在 try-catch 块中,但如果有内部代码显式处理异常并让程序继续运行,它就不会到达入口点 catch 块。 如果您这样做是为了调试异常,那么在 Visual Studio 中有一种更简单的方法;在调试菜单上转到 Exceptions 选项,您可以选择 VS 在发生异常时停止的选项,即使它已被处理,以及其他一些事情。 顺便说一句,这通常是“糟糕的形式”。特别是如果您执行try ... catch (...) ;
之类的操作(即默默地吃掉任何/所有可能的例外情况)。
【参考方案1】:
是的,您可以通过catch
ing ...
捕获内部try
/catch
块未处理(且未重新抛出)的所有异常:
try
// do some stuff
catch (...)
// catch any exceptions that weren't handled and/or rethrown in the try block
您也可以将其与其他 catch
es 结合使用,但请确保它们在 catch (...)
之上,否则它们将被 catch-all 所掩盖(您应该会收到编译器错误)。
【讨论】:
这不一定会捕获 any 异常,因为在内部 try-catch 块中处理并且不会停止程序执行的异常不会被冒泡。跨度> @RussC 确实如此,但使用 C++ 无法捕获所有异常。 同意,但您的措辞无意中具有误导性;只是想确保 OP 知道异常范围。 @RussC 好的,我澄清了一点。【参考方案2】:你可以像这样捕获所有异常
try
// ...
catch (...)
// ...
不过更有用的做法是捕获特定异常,然后最终落入 (...)
try
// ...
catch (const std::exception& ex)
// ...
catch (const std::string& ex)
// ...
catch (...)
// ...
【讨论】:
【参考方案3】:不,您无法捕获所有异常,因为您无法捕获已被嵌套在 try/catch
块中的另一个处理程序捕获的异常。
【讨论】:
以上是关于有没有办法在 C++ 中捕获所有异常? [复制]的主要内容,如果未能解决你的问题,请参考以下文章