Portée des fonctions ami en ligne
Dans le contexte de C , la portée lexicale d'une fonction ami en ligne s'étend à la classe dans laquelle elle est définie. Cependant, déterminer sa portée réelle nécessite une exploration plus approfondie.
La norme ISO C spécifie que lorsqu'une fonction ami en ligne est déclarée dans une classe de portée d'espace de noms, elle nomme une fonction dans la portée d'espace de noms englobante la plus proche. Si la fonction n'a pas déjà été déclarée, la déclaration ami à elle seule ne la rend pas visible dans cette portée pour une recherche non qualifiée.
Au lieu de cela, la déclaration ami permet d'accéder à la fonction via une recherche dépendante de l'argument (ADL ). Cela signifie que la fonction ami peut être appelée en utilisant son nom non qualifié tant que les arguments de la fonction ont des types qui correspondent à la portée de l'espace de noms contenant la déclaration de fonction.
Par conséquent, les fonctions ami en ligne déclarées dans les classes ne peuvent être appelées que via ADL, à moins qu'ils ne soient ultérieurement déclarés ou définis dans la portée de leur espace de noms englobant. Cela garantit que la fonction n'est accessible que lorsque les arguments permettent une résolution de nom sans ambiguïté.
L'extrait de code suivant illustre ce comportement :
namespace foo { struct bar { friend void baz(); }; } // Compilation error in main: 'baz' is not accessible through unqualified lookup int main() { foo::baz(); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!