不寻常的范围解析运算符

时间:2014-09-22 13:45:11

标签: c++ visual-studio-2010 scope

今天重构一些C ++代码时,我得到了一些可归结为以下内容的代码

class x
{
  public:
    void x::y();
};

x::范围解析运算符是否在此处执行任何操作,是一个错误,还是其他内容。我最好的猜测是,它是一些自动完成遗留下来的人工制品,但我很想知道我是否遗漏了任何东西。正在使用的编译器是VS2010 SP1。

1 个答案:

答案 0 :(得分:13)

这是一个错误,大多数编译器都会拒绝它。例如,GCC says

prog.cpp:4:10: error: extra qualification ‘x::’ on member ‘y’ [-fpermissive]
     void x::y();
          ^

C ++ 11 8.3 / 1不允许使用冗余限定符:

  

声明者标识不得限定,除了其类之外的成员函数或静态数据成员的定义,外部名称空间的函数或变量成员的定义或显式实例化其名称空间,或其名称空间之外的显式特化的定义,或作为另一个类或名称空间的成员的友元函数的声明。

没有任何例外适用于其类中的成员声明。