以下代码使用g ++版本5.1.0成功编译。请注意成员函数catch
中没有对应try
的{{1}}。我想知道这种语法是否合法,如果有,它有什么影响?
foo::bar()
答案 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 提出这个问题!