Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么编译器支持多余的作用域限定,它合法吗?_C++_Scope_Definition - Fatal编程技术网

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)--我修改了这个问题,以强调这个定义是我真正好奇的部分(我意识到这可能不会改变你的答案)。