【发布时间】:2015-11-25 06:44:45
【问题描述】:
【问题讨论】:
标签: c++ namespaces namespace-organisation
【问题讨论】:
标签: c++ namespaces namespace-organisation
由于它提到朋友查找,在这种情况下,“结构范围”似乎是指类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 不可见。
【讨论】: