【问题标题】:What is structural scope of a type T?T 类型的结构范围是什么?
【发布时间】:2015-11-25 06:44:45
【问题描述】:

我在wikipedia 上发现了它:

T的结构范围(可用于定位友元函数)

有人能解释一下它是什么吗? Google 帮不上什么忙。

【问题讨论】:

    标签: c++ namespaces namespace-organisation


    【解决方案1】:

    由于它提到朋友查找,在这种情况下,“结构范围”似乎是指类T的范围(当T是一个类)或封闭类的范围(当T是一个成员类型时)在类中声明)。整个段落的措辞听起来很奇怪,因为 C++ 语言没有正式将类类型称为“结构类型”,也没有正式定义“结构范围”。除此之外,它似乎将类范围称为“命名空间”,这是不正确的。

    通过提及朋友,它显然意味着像这样的情况

    struct T {
      friend void foo(T) {}
    };
    
    int main() {
      T t;
      foo(t);
    }
    

    struct T {
      enum E { A };
      friend void foo(E) {}
    };
    
    int main() {
      T::E e = T::A;
      foo(e);
    }
    

    在这些情况下,对main 中的foo 的调用只有因为ADL 检查类T 的范围并在那里显式查找友函数才能解决。如果没有 ADL,foo 将对main 不可见。

    【讨论】:

    • 我们应该修复维基百科(我的意思是你:-)
    • 删除了违规文字。我没有看到实际总结 [basic.lookup.argdep]/2 以获取 Wikipedia 文章的意义。
    猜你喜欢
    • 1970-01-01
    • 2013-06-28
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2012-10-23
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多