web-dev-qa-db-fra.com

Qu'est-ce qu'un nom complet?

Pour autant que je sache, le terme pleinement qualifié n'est pas mentionné dans la norme ( par exemple ), mais je peux souvenez-vous de l'avoir entendu plusieurs fois en ligne.

Que veulent dire les gens lorsqu'ils disent qu'un nom est pleinement qualifié?

Est-ce que cela compte?

A::f()

ou seulement ça?

::A::f()

Et, si elle est standard, quelle formulation n'ai-je pas trouvée?

Un identifiant qui utilise l'opérateur de résolution de portée est un nom qualifié selon [expr.prim.id.qual]. Sinon, il n'est pas qualifié.

La norme ne définit pas la signification de pleinement qualifié , mais elle le fait le mentionner dans [bibliothèque]/[exigences]/[organisation]/[contenu] qui dit (citation du projet standard)

Chaque fois qu'un nom x défini dans la bibliothèque standard est mentionné, le nom x est supposé être pleinement qualifié de :: std :: x, sauf indication contraire explicite. Par exemple, si l'élément Effects: pour la fonction de bibliothèque F est décrit comme appelant la fonction de bibliothèque G, la fonction :: std :: G signifie.

Wikipedia définit nom complet :

En programmation informatique, un nom complet est un nom sans ambiguïté qui spécifie à quel objet, fonction ou variable un appel fait référence sans égard au contexte de l'appel

Seul un nom qualifié à partir de l'espace de noms global est sans ambiguïté sans contexte. Ceci est l'usage courant.

45
eerorika

En effet, ce n'est pas un terme standard. Il n'a pas de définition dans la norme.

Cependant, l'expression "pleinement qualifié" apparaît exactement une fois, dans [contenu] (15.5.1.1 "Contenu de la bibliothèque" dans le projet N4800 le plus récent) au paragraphe 3:

Chaque fois qu'un nom x défini dans la bibliothèque standard est mentionné, le nom x est supposé être entièrement qualifié de ::std::x, sauf indication contraire explicite.

Donc, dans cette définition, seuls les noms commençant par :: sont pleinement qualifiés.

23
Sebastian Redl