$ 11.4/5 - "[...] Un amico funzione definita in una classe è nel (lessicale) di validità della classe in cui è definito [...]"Amici confusione
Cosa fa questo dichiarazione significa?
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(){}
Ciò che confonde è che la chiamata a 'f' da 'A :: f1' è tranquilla comprensibile. Tuttavia, perché la chiamata a "f" da "A :: f2" è mal formata, quando un amico è in ambito "lessicale" della classe dell'amicizia? Cosa significa "ambito lessicale"?
Allo stesso tipo, perché l'uso di "MYINT" in "f" è OK? Non dovrebbe essere "A :: MYINT"?
Se posso aggiungere un parametro di tipo 'A *' a 'f', allora sia 'F1' e 'F2' sono in grado di trovare 'f' a causa di ADL. Questo è comprensibile.
è in ambito (lessicale) significa che ha accesso a contenere ambito. quindi MYINT è valido. http://stackoverflow.com/questions/1047454/what-is-lexical-scope, http://stackoverflow.com/questions/991518/c-how-do-i-call-a-friend-template-function- definita all'interno-a-classe – Anycorn