$ 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