C++方法名称可以通过标题中的类名限定吗?

unw*_*ind 4 c++ syntax declaration classname

简单的问题,这是有效的C++:

class Foo
{
    void Foo::doSomething();
};
Run Code Online (Sandbox Code Playgroud)

这个问题的观点:是重复使用的类名和双冒号的方法名前有效的内部类的声明?

我在编译使用g ++ 4.2.3执行此操作的代码时遇到问题.在挖掘和更改代码之前,我很想看到对这里描述语法的内容的引用.或者降级编译器; 这确实是用g ++ 3.3.6构建的.

我得到的错误是(大致):

Foo.h:3: error: extra qualification ‘Foo::’ on member ‘doSomething’
Run Code Online (Sandbox Code Playgroud)

我做了谷歌,但无法想出一些东西.我没有标准,即使我这样做也可能需要一段时间才能找到任何权威的东西.我不是C++语言律师.

Dan*_*son 18

我看一下标准,9.2节将是相关部分.我对BNF并不是那么好,但我没有在BNF中看到任何表明这是允许的班级成员.标识符甚至在BNF中被命名为"unqualified-id".

G ++改变了4.1版本中的行为,显然很多其他编译器接受了这个,但我从未见过这种风格,我不知道为什么有人会这样做.由于它似乎不会在相当多的编译器上触发错误,因此这种风格可能有一些历史原因,但据我所知,它确实无效.

我通过Google找到的唯一好的参考是这个页面,它只是试图解释G ++ 4.1中的一些变化.


小智 5

像丹一样,我看了标准没有明确的结果。我用Comeau 的在线编译器(被认为是世界上最符合标准的)尝试了你的代码,并得到:

第 3 行:错误:成员声明中不允许使用限定名称

如果您有兴趣进一步讨论,我建议在comp.lang.c++.moderated新闻组上发布问题,因为那里的 C++ 语言律师比这里多得多。