【问题标题】:Why are redundant scope qualifications supported by the compiler, and is it legal?为什么编译器支持冗余范围限定,它是否合法?
【发布时间】:2012-08-21 13:24:08
【问题描述】:

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

class A {
  A();
};

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

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

问题:

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

更新详情:

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


Clang 一个 Apple 的 GCC 4.2 + LLVM 是编译器

【问题讨论】:

  • 有人问过这个问题,但我想这比某些人更难找到。
  • @chris 我浏览了几页,但一无所获——如果找到了 dup,很高兴关闭。也许我只是没有使用正确的术语进行搜索。
  • @chris 是的。我记得詹姆斯回答的问题非常相似。但我没有心情去挖掘他的 2000 多个答案。

标签: c++ scope definition


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢 (+1) -- 我已经修改了问题以强调 定义 是我真正好奇的部分(我意识到这可能不会改变你的回答)。
猜你喜欢
  • 2018-02-08
  • 2015-02-27
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多