捕获而不尝试成功编译

时间:2016-07-16 20:04:32

标签: c++ language-lawyer

以下代码使用g ++版本5.1.0成功编译。请注意成员函数catch中没有对应try的{​​{1}}。我想知道这种语法是否合法,如果有,它有什么影响?

foo::bar()

最初见于Catch block in constructor without try

2 个答案:

答案 0 :(得分:6)

你给出的例子,

struct foo
{
  void bar()
  {
  }
  catch (...)
  {
  }
};

...不是有效的标准C ++。

它可能是g ++语言扩展。

您链接到的问题中的catch es看起来像 function catch blocks ,但同样需要try关键字。

答案 1 :(得分:3)

正如其他人很快指出的那样,引用的代码并不是格式良好的C ++。由于在最近的GCC 4/5/6分支中使用的重写C ++解析器的疏忽,它被允许通过。

我将此归档为GCC Bug/PR c++/71909。从那里可以看出,刚刚对所有3个分支进行了提交,以确保只有在遇到匹配函数 - catch块时才接受函数 - try块。为期3天的转变,非常好: - )

感谢 Richard 提出这个问题!