$ 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(){}
Смущает здесь является то, что призыв к 'F' от 'A :: f1' тихо и понятно. Однако почему звонок «f» из «A :: f2» плохо сформирован, когда друг находится в «лексическом» диапазоне подружительного класса? Что означает «лексическая» область?
В этом же типе почему использование 'MYINT' в 'f' ОК? Разве это не должно быть «A :: MYINT»?
Если добавить параметр типа «А '» до «F», то как «f1» и «F2» могут найти «F» из-за ADL. Это понятно.
находится в (лексическом) объеме, что означает, что он имеет доступ к содержанию области. поэтому MYINT действителен. http://stackoverflow.com/questions/1047454/what-is-lexical-scope, http://stackoverflow.com/questions/991518/c-how-do-i-call-a-friend-template-function- установленные внутри-а класс – Anycorn