确保始终捕获异常

sac*_*hin 25 c++ exception try-catch

调用函数不需要捕获C++中的异常(没有编译时错误).所以这取决于开发人员是否使用try/catch来捕获它们(与Java不同).

有没有办法可以确保抛出的异常总是被调用函数使用try/catch捕获?

Chr*_*ung 24

没有.

请参阅实用的异常规范,了解原因.

你可以"帮助"这个的唯一方法是记录你的函数可以抛出的异常,比如在头文件中声明它的注释.这不是由编译器或任何东西强制执行的.为此目的使用代码审查.


Sco*_*ham 9

你不应该在这里使用例外.如果您需要在使用此功能的任何地方期待它,这显然不是一个例外情况!

更好的解决方案是让函数返回这样的实例.在调试版本中(假设开发人员使用他们刚编写的代码路径),如果他们忘记检查操作是否成功,他们将获得一个断言.

class SearchResult
{
  private:
    ResultType result_;
    bool succeeded_;
    bool succeessChecked_;

  public:
    SearchResult(Result& result, bool succeeded)
      : result_(result)
      , succeeded_(succeeded)
      , successChecked_(false)
    {
    }

    ~SearchResult()
    {
      ASSERT(successChecked_);
    }

    ResultType& Result() { return result_; }
    bool Succeeded() { successChecked_ = true; return succeeded_; }
}
Run Code Online (Sandbox Code Playgroud)