什么是T型结构范围?

时间:2015-11-25 06:44:46

标签: c++ namespaces namespace-organisation

我在wikipedia上找到了它:

  

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

有人可以解释一下它是什么吗?谷歌没有多大帮助。

1 个答案:

答案 0 :(得分:6)

因为它提到了朋友查找,"结构范围"在这种情况下,似乎引用类T的范围(当T是一个类时)或封闭类的范围(当T是在类中声明的成员类型时)。整个段落的措辞听起来很奇怪,因为C ++语言并没有正式将类类型称为"结构类型"并没有正式定义"结构范围"。最重要的是,它似乎将类范围称为" namespace",这是不正确的。

通过提及朋友,它显然意味着像

这样的情况
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);
}

在这些情况下,只有因为ADL检查类foo的范围并在那里显式查找友元函数,才能解析mainT的调用。如果没有ADL,foo将无法访问main