相关疑难解决方法(0)

什么是单一的"抛出"; 声明呢?

这些天,我一直在阅读很多C++ FAQ,尤其是这个页面.

通过阅读本节,我发现了一种"技术",作者称之为"异常调度程序",允许某人将所有异常处理分组到一个方便的函数中:

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你知道的还有其他"怪异"(可能不是好词)的使用吗?

谢谢.

c++ exception throw

47
推荐指数
3
解决办法
1万
查看次数

使用catch(...)(省略号)进行事后分析

有人在不同的问题采用建议catch(...)通过整个周围的意外/不可预见的例外-捕获所有未处理的,否则main()try{}catch(...){}块.

这听起来像一个有趣的想法,可以节省大量时间调试程序,并至少留下一些发生的事情.

这个问题的本质是什么信息可以通过这种方式恢复(除了我留下的任何调试全局),以及如何恢复它(如何访问和识别被调用的任何catch)

此外,有什么警告与它有关.特别是:

  • 它会与后来发芽的线程一起玩吗?
  • 它不会破坏处理段错误(在别处作为信号捕获)
  • 它会不会影响其他try ... catch块不可避免地嵌套在里面,那是否有处理预期的异常?

c++ debugging exception-handling try-catch ellipsis

14
推荐指数
2
解决办法
9127
查看次数