Maison >développement back-end >C++ >Comment fonctionnent la portée et l'accessibilité des fonctions Inline Friend en C ?

Comment fonctionnent la portée et l'accessibilité des fonctions Inline Friend en C ?

DDD
DDDoriginal
2024-12-16 20:44:10443parcourir

How Does the Scope and Accessibility of Inline Friend Functions Work in C  ?

Fonctions d'ami en ligne : portée et accessibilité

Lors de la définition d'une fonction d'ami en ligne dans une classe, sa portée est principalement influencée par l'élément englobant le plus proche espace de noms. La déclaration ami introduit un nom de fonction dans l'espace de noms, mais elle ne rend pas immédiatement la fonction visible pour une recherche régulière dans cette portée.

Selon la norme C (ISO/IEC 14882:2011), "si un La déclaration ami dans une classe non locale déclare d'abord une classe ou une fonction, la classe ou la fonction ami est membre de l'espace de noms englobant le plus interne. Cela signifie que le nom de la fonction ami n'est initialement pas trouvé via une recherche non qualifiée ou qualifiée dans la portée de l'espace de noms.

Uniquement lorsqu'une déclaration correspondante est fournie dans la portée de l'espace de noms lui-même, avant ou après la définition de la classe qui accorde l'amitié, la fonction deviendra-t-elle visible grâce à une recherche sans réserve. De plus, la fonction ami peut toujours être appelée via une recherche dépendante des arguments, qui prend en compte les fonctions des espaces de noms et des classes associées aux types d'arguments.

Par exemple, le code fourni dans la question définit une fonction ami en ligne nommée baz dans la classe bar dans l'espace de noms foo. Cependant, les tentatives d'appel de baz à partir de différentes portées au sein du programme entraînent des erreurs car la fonction n'est pas visible via une recherche régulière :

  • foo::baz() échoue car baz n'est pas membre de foo namespace.
  • foo::bar::baz() échoue car baz n'est pas membre du bar class.
  • foo::bar::call_friend() échoue car baz n'a pas été déclaré dans le cadre de la fonction membre call_friend.

Par conséquent, les fonctions d'ami en ligne ont une accessibilité limitée et portée. Ils sont principalement connus pour leur capacité à accéder aux membres privés et protégés d’une classe sans spécifier le nom de la classe comme qualificatif. Cependant, leur visibilité dans la portée environnante est limitée jusqu'à ce qu'une déclaration correspondante soit fournie dans l'espace de noms ou via une recherche dépendante des arguments.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn