C++ 为什么编译器支持多余的作用域限定,它合法吗?
我在两个编译器上进行了测试,惊讶地发现它们都毫无怨言地支持以下定义:C++ 为什么编译器支持多余的作用域限定,它合法吗?,c++,scope,definition,C++,Scope,Definition,我在两个编译器上进行了测试,惊讶地发现它们都毫无怨言地支持以下定义: class A { A(); }; A::A::A() {} ^^^ 请注意,对于方法,这也会成功,尽管在声明过度限定时会进行标记 问题: 这是一个有效的C++程序吗? 如果是这样的话,它的作用是什么?或者它仅仅是一个副产品 更新的详细信息: 如果最初的问题不清楚或太短:我很好奇为什么定义中允许冗余资格(上面也加了强调) Clang an Apple的GCC 4.2+LLVM是编译器是的,它是允许的(§9/
class A {
A();
};
A::A::A() {}
^^^
请注意,对于方法,这也会成功,尽管在声明过度限定时会进行标记
问题:
- 这是一个有效的C++程序吗?
- 如果是这样的话,它的作用是什么?或者它仅仅是一个副产品
Clang an Apple的GCC 4.2+LLVM是编译器是的,它是允许的(§9/2): 类名也被插入到类本身的作用域中;这称为注入的类名。出于访问检查的目的,注入的类名被视为公共成员名
有关导致类名注入的原因的信息,您可能想阅读。这是有人问过的,但我想这是一个比某些更难找到的dup。@chris我看了几页,但什么也没找到——如果找到dup,很高兴关闭它。也许我只是没有使用正确的术语进行搜索。这可能会有所帮助:@chris Yes。我记得詹姆斯回答了一些非常相似的问题。但是我没有心情去挖掘他2000多个答案。@Mystical:谢谢(+1)--我修改了这个问题,以强调这个定义是我真正好奇的部分(我意识到这可能不会改变你的答案)。