【发布时间】:2010-09-03 02:49:16
【问题描述】:
$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”都能够找到“f”,因为 ADL。这是可以理解的。
【问题讨论】:
-
在(词法)范围内意味着它可以访问包含范围。因此 MYINT 是有效的。 stackoverflow.com/questions/1047454/what-is-lexical-scope, stackoverflow.com/questions/991518/…