$ 11.4/5 - “[...]在一个类中定义的朋友的功能是在类的(词法)范围,其中它被定义[...]”好友混乱
这是什么声明的意思?
struct A{
typedef int MYINT;
void f2(){f();} // Error, 'f' is undefined
friend void f(){MYINT mi = 0;} // Why does this work, shouldn' it be A::MYINT?
void f1(){f();} // Error, 'f' is undefined
};
int main(){}
这到底是怎么迷惑的是,呼吁从 'A :: F1' 'F' 是安静的理解。然而,当朋友处于友谊班的“词汇”范围时,为什么从'A :: f2'调用'f'是不合格的? “词法”范围意味着什么?
在同一类型中为什么在'f'中'MYINT'的用法正常?它不应该是'A :: MYINT'吗?
如果我添加型 'A *' 到 'F' 的参数,那么这两个 'F1' 和 'F2' 都能够找到,因为ADL的 'F'。这是可以理解的。
在(词汇)范围内意味着它有权访问包含范围。因此MYINT是有效的。 http://stackoverflow.com/questions/1047454/what-is-lexical-scope,http://stackoverflow.com/questions/991518/c-how-do-i-call-a-friend-template-function-定义-内部-A级 – Anycorn 2010-09-03 03:22:25