通过阅读本节,我发现了一种"技术",作者称之为"异常调度程序",允许某人将所有异常处理分组到一个方便的函数中:
void handleException()
{
try {
throw; // ?!
}
catch (MyException& e) {
//...code to handle MyException...
}
catch (YourException& e) {
//...code to handle YourException...
}
}
void f()
{
try {
//...something that might throw...
}
catch (...) {
handleException();
}
}
Run Code Online (Sandbox Code Playgroud)
困扰我的是单一throw;陈述:如果你考虑给定的例子然后肯定,它显然是做什么的:它重新抛出首先陷入的异常f()并再次处理它.
但是,如果我handleException()直接调用它,而不是从一个catch()条款中做到这一点怎么办?有没有指定的行为?
此外,对于奖励积分,throw你知道的还有其他"怪异"(可能不是好词)的使用吗?
谢谢.
有人在不同的问题采用建议catch(...)通过整个周围的意外/不可预见的例外-捕获所有未处理的,否则main()用try{}catch(...){}块.
这听起来像一个有趣的想法,可以节省大量时间调试程序,并至少留下一些发生的事情.
这个问题的本质是什么信息可以通过这种方式恢复(除了我留下的任何调试全局),以及如何恢复它(如何访问和识别被调用的任何catch)
此外,有什么警告与它有关.特别是: