4

我在维基百科上找到了它:

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

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

4

1 回答 1

6

由于它提到了友元查找,因此在这种情况下,“结构范围”似乎是指类的范围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);
}

在这些情况下,只有因为 ADL 检查类的范围并在那里显式查找友元函数,才可能解决对fooin的调用。没有 ADL,对.mainTfoomain

于 2015-11-25T06:49:05.877 回答