C ++何时处理异常

时间:2015-11-06 19:10:07

标签: c++ exception exception-handling

如果您有这样的函数调用,哪个级别最适合处理我的抛出?我只是想弹出一条错误信息。

  class Test {
     void A() {
        B();
        // try and catch here ?
     }

     void B() {
        C();
        // try and catch here ?
     }

     void C() {
        throw 1;
     }
  }

  int main()
  {
     Test test;
     test.A();
     // try and catch here ?

     return 0;
  }

2 个答案:

答案 0 :(得分:0)

嗯,这取决于您的实际使用情况。

如果您只想弹出错误消息并终止程序,则根本不应该抓住任何内容。

默认的std::terminate处理程序已经这样做了。

如果您只是想显示错误消息并继续构建,您应该从能够克服错误的级别中捕获,并且可以安全地继续您的程序运行状态。

答案 1 :(得分:0)

当您决定处理异常时,很大程度上取决于设计模式和特定方案,但通常您希望在可以可靠地处理异常后立即处理异常。

如果您没有足够的信息来处理异常,则应该在调用堆栈上抛出更高的异常。一些原因如下:

  1. 异常比检查错误处理的返回类型更昂贵
  2. 如果你继续在调用堆栈中抛出异常,很多代码将无法运行(或者至少你必须写出很多混乱的最终块)
  3. 在调用堆栈上的高功能将承受许多不同类型的异常,并且妨碍了他们的预期工作
  4. 相反,如果您能够可靠地捕获并处理异常:

    1. 调用堆栈上比catch块更高的函数甚至不知道发生了异常

    2. 通过避免过度异常抛出,您将获得性能提升

    3. 通常更好地设计分离关注点。