捕获而不尝试成功编译

catch without try compiling successfully

本文关键字:成功 编译      更新时间:2023-10-16

以下代码使用 g++ 版本 5.1.0 成功编译。 请注意成员函数 foo::bar() 中没有相应trycatch。 我想知道这种语法是否合法,如果是的话,它有什么影响?

struct foo
{
  void bar()
  {
  }
  catch (...)
  {
  }
};
int main ()
{
  foo f;
  f.bar();
  return 0;
}

最初出现在构造函数的 Catch 块中,无需尝试

你举的例子,

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

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

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

您链接的问题中的catch看起来像函数捕获块,除了这也需要一个try关键字。

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

我将其作为GCC Bug/PR c c ++/71909提交。从那里可以看出,刚刚对所有 3 个分支进行了提交,以确保只有在已经遇到匹配的函数try块时才会接受函数catch块。3天的周转时间,这很好:-)

感谢理查德提出这个问题!