【问题标题】:What is a fully qualified name?什么是完全限定名称?
【发布时间】:2019-10-09 22:01:07
【问题描述】:

据我所知,标准 (e.g.) 中没有提到完全合格这个词,但我记得在网上“听到”了很多次。

人们说一个名字完全合格是什么意思?

这算不算?

A::f()

还是只有这个?

::A::f()

而且,如果它标准的,我没有找到哪个措辞?

【问题讨论】:

  • 使用注入的类名,可以真的限定内容。 ::A::A::A::A::f()。但不确定它是否“完全”。
  • @StoryTeller 我们应该请求将该术语添加到标准中! really-really-really-qualified-id
  • language-lawyer 标签是什么意思?
  • @Evorlor 将鼠标悬停在它上面(和/或单击)

标签: c++ language-lawyer c++17


【解决方案1】:

使用范围解析运算符的标识符是符合 [expr.prim.id.qual] 的限定名称。否则不合格。

标准没有定义完全合格的含义,但它确实在[library]/[requirements]/[organization]/[contents]中提到了它其中说(引用标准草案)

每当提到标准库中定义的名称 x 时,除非另有明确说明,否则假定名称 x 完全限定为 ::std::x。 例如,如果库函数 F 的 Effects: 元素被描述为调用库函数 G,则表示函数 ::std::G。

维基百科定义Fully qualified name

在计算机编程中,完全限定名称是一个明确的名称,它指定调用引用哪个对象、函数或变量,而不考虑调用的上下文

只有从全局命名空间开始的限定名称在没有上下文的情况下是明确的。这是常见的用法。

【讨论】:

    【解决方案2】:

    确实,这不是一个标准术语。标准中没有定义。

    但是,“完全合格”一词在 [contents](15.5.1.1 “Library contents” in the as-of-writing most current draft N4800)第 3 段中只出现了一次:

    只要提到标准库中定义的名称x,除非另有明确说明,否则名称x 被假定为完全限定为::std::x

    所以在这个定义中,只有以:: 开头的名称是完全限定的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2018-04-18
      • 2014-08-01
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多