23

我在两个编译器上进行了测试,惊讶地发现它们都毫无怨言地支持以下定义:

class A {
  A();
};

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

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

问题:

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

更新细节:

如果最初的问题不清楚或太短:我很好奇为什么定义允许多余的资格(强调也在上面添加)。


Clang an Apple 的 GCC 4.2 + LLVM 是编译器

4

1 回答 1

18

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

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

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

于 2012-08-27T02:07:53.813 回答