为什么编译器支持冗余范围限定,是否合法?

时间:2012-08-27 02:03:21

标签: c++ scope definition

我在两个编译器上进行了测试,并且惊讶地看到它们都支持以下定义而没有投诉:

class A {
  A();
};

A::A::A() {}
   ^^^

请注意,这也适用于方法,尽管在声明过度限定时会标记它。

问题:

  • 这是一个有效的C ++程序吗?
  • 如果是这样,它的用途是什么 - 或者仅仅是副产品?

更新了详细信息:

如果原始问题不明确或太短:我很好奇为什么在定义上允许多余的资格认证(重点也在上面添加)。


Clang Apple的GCC 4.2 + LLVM是编译器

1 个答案:

答案 0 :(得分:18)

是的,允许(§9/ 2):

  

类名也插入到类本身的范围内;这被称为注入类名。出于访问检查的目的,inject-class-name被视为公共成员名称。

有关导致课程名称注入的原因的信息,您可能需要阅读N0444