Maison >développement back-end >C++ >Pourquoi ne puis-je pas appeler directement les fonctions d'amis en ligne depuis leur classe de définition ?

Pourquoi ne puis-je pas appeler directement les fonctions d'amis en ligne depuis leur classe de définition ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-29 11:56:11785parcourir

Why Can't I Directly Call Inline Friend Functions from Within Their Defining Class?

Portée de visibilité des fonctions d'ami en ligne

Malgré la définition des fonctions d'ami en ligne au sein d'une classe, leur portée réelle s'étend au-delà des limites de la classe. La norme C stipule que le nom d'une fonction ami en ligne fait référence à une fonction déclarée dans la portée de l'espace de noms englobant la plus proche.

Cependant, cette fonction déclarée n'est pas accessible via une recherche non qualifiée ou qualifiée jusqu'à ce qu'une déclaration correspondante soit fournie dans cet espace de noms. portée. Par conséquent, les appels directs à la fonction ami depuis la classe elle-même, la portée englobante ou les fonctions membres entraîneront des erreurs.

Cette limitation provient du fait que la fonction ami est déclarée dans la classe sans remplacer ni redéfinir un nom de fonction existant. Par conséquent, le compilateur ne reconnaît pas la fonction dans la classe ou dans la portée de l'espace de noms englobant jusqu'à ce qu'il rencontre une déclaration explicite dans cet espace de noms.

Pour accéder à la fonction ami en ligne, vous pouvez utiliser la recherche dépendante de l'argument (ADL) . ADL permet au compilateur de rechercher la fonction en fonction des types d'arguments utilisés dans l'appel. Cette approche s'aligne sur le principe selon lequel la fonction est considérée comme « liée » au type passé en argument.

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