Partager via


Les espaces de noms (C++)

Le langage C++ fournit un espace de noms global unique.Cela peut entraîner des problèmes avec des conflits de noms globaux.Par exemple, considérez ces deux fichiers d'en-tête C++ :

char func(char);
class String { ... };

// somelib.h
class String { ... };

avec ces définitions, il est impossible d'utiliser les deux fichiers d'en-tête dans un programme unique ; les classes d' String s'opposeront.

Un espace de noms est une zone déclarative qui associe un identificateur supplémentaire pour tous les noms déclarés à l'intérieur.L'identificateur supplémentaire la rend moins probable qu'un nom est en conflit avec les noms déclarés ailleurs dans le programme.il est possible d'utiliser le même nom dans les espaces de noms distincts sans conflit même si les noms apparaissent dans la même unité de traduction.Condition que elles apparaissent dans les espaces de noms distincts, chaque nom sera unique en raison de l'ajout de l'identificateur de l'espace de noms.Par exemple :

namespace one {
   char func(char);
   class String { ... };
}

// somelib.h
namespace SomeLib {
   class String { ... };
}

Maintenant les noms de classes ne s'opposeront pas parce qu'ils sont one::String et SomeLib::String, respectivement.

C++ n'autorise pas les noms composés pour les espaces de noms.

// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
   namespace b {
      int i;
   }
}

// not allowed
namespace c::d {   // C2653
   int i;
}

les déclarations dans la portée du fichier d'une unité de traduction, en dehors de tous les espaces de noms, sont toujours des membres de l'espace de noms global.

Sur quels éléments souhaitez-vous obtenir des informations supplémentaires ?

Voir aussi

Référence

Déclarations