繁体   English   中英

C ++ try-catch异常处理约定

[英]C++ try-catch exception handling conventions

这可能是一个微不足道的问题 - 但这对我来说并不明显,所以我需要一些确认。 假设我在函数中有一个try-catch块:

int function some_crap() {
   some_type b;
   int a = 10;
   try {
      a = boost::numeric_cast<int>(b);
   }
   catch(boost::bad_numeric_cast& e) {
      std::cout << e.what() << std::endl;
      return a;
   }
   catch(...) {
      //-Handle other unknown exceptions
      return a;
   }
   return a;
}

IIRC,我需要在每个catch块中return a语句,对吧? 同样在每个catch块中, a的值为10 ,对吧?

感谢您的时间和兴趣。 --T

IIRC,我需要在每个catch块中return a语句,对吧?

不,不是在这种情况下。 重要的是你不会在没有返回任何东西的情况下流出你的值返回函数的末尾(通过6.6.3 / 2这将是未定义的行为)。

既然你有一个return语句:

return a;

在函数结束时, catch块不需要包含一个。

此外,如果在发生错误时没有返回任何值,则可以通过执行以下操作重新抛出当前处理的异常:

throw;

或者完全避免捕获并重新抛出该异常,并通过省略相应的catch块来传播它,以防您没有足够的知识来恢复和/或您不需要记录任何消息。

让异常向上传播调用堆栈可能比仅返回硬编码值(例如10)更有意义。

至于第二个问题:

同样在每个catch块中,a的值为10,对吧?

是的,这是有保证的。

既然你已经return a函数的末尾,你可以省略return a内部catch 但是,它也可以从捕获中 返回

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM