答案 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
的范围并在那里显式查找友元函数,才能解析main
中T
的调用。如果没有ADL,foo
将无法访问main
。