我在两个编译器上进行了测试,并惊讶地发现两者都支持以下内容定义无怨无悔:
class A {
A();
};
A::A::A() {}
^^^
请注意,这对于方法也是成功的,尽管当声明过度限定时会被标记。
问题:
- 这是一个有效的 C++ 程序吗?
- 如果是这样,它有什么目的——或者只是一个副产品?
更新细节:
如果最初的问题不清楚或太短:我很好奇为什么允许冗余资格定义(上面也添加了重点)。
Clang 是 Apple 的 GCC 4.2 + LLVM 编译器
是的,这是允许的(§9/2):
类名也被插入到类本身的范围中;这称为注入类名。出于访问检查的目的,注入的类名称被视为公共成员名称。
有关导致类名注入的推理的信息,您可能需要阅读N0444.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)