Maison  >  Article  >  développement back-end  >  Comment fonctionne réellement la portée d'une fonction Inline Friend en C ?

Comment fonctionne réellement la portée d'une fonction Inline Friend en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-25 02:13:21564parcourir

How Does the Scope of an Inline Friend Function in C   Actually Work?

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!

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