【问题标题】:Forcing C++ compilers to check for exception handling强制 C++ 编译器检查异常处理
【发布时间】:2010-12-21 16:01:35
【问题描述】:

我想知道是否有一些编译器参数,最好是在 gcc (g++) 中,它将缺少 try/catch 块视为错误。这是 java 中的标准行为,我一直很喜欢它。

【问题讨论】:

  • 不,考虑到标准的设计,这基本上是不可能的,因为在编译时不可能确切知道要调用哪些函数。
  • 定位主函数。将所有内容放在一个 try-catch 块中。没有错误。 :)(我想知道如果在构建全局变量的过程中抛出异常会发生什么?)

标签: c++ exception-handling


【解决方案1】:

由于 Java 中的已检查异常依赖于 throw 签名,您可以在 SO 上的 this question 中了解为什么您不想在 C++ 中使用 throw 函数签名。

【讨论】:

    【解决方案2】:

    好吧,使用异常规范通常是个坏主意:http://cplusplus.co.il/2009/10/06/exception-specifications/

    如果不使用这些,编译器基本上无法知道可能会抛出哪个异常,所以没有办法这样做。

    您可以做的是提供您自己的 std::terminate 实现(通过调用 std::set_terminate())并在那里处理未捕获的异常。

    【讨论】:

      【解决方案3】:

      可以在 C++ 中使用异常做的一件事是在函数中使用异常规范。这不会主动防止从该函数抛出未列出的异常,但它会使它们出错(并将它们全部映射到预定义的unexpected()

      所以int f() throw (); 是 C++,用于“将函数 f 引发的任何异常视为错误”。

      【讨论】:

      • 可能值得注意的是,它是“视为 runtime 错误”。 C++ 编译器仍然需要来编译void foo() throw() { throw 42; }
      猜你喜欢
      • 2012-08-27
      • 2013-03-02
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多