Partager via


Déclaration d'espace de noms

Une déclaration namespace reconnaît et assigne un nom unique à un espace de noms déclaré par l'utilisateur.

namespace identifier

Notes

Ces espaces de noms permettent de résoudre le problème de la collision de nom dans les grands programmes et les bibliothèques. Les programmeurs peuvent utiliser des espaces de noms pour développer de nouveaux composants logiciels et bibliothèques sans provoquer de conflits de noms avec des composants existants.

Par exemple :

// namespace_declaration1.cpp
namespace X
{
   int i;
   double j;
}
int main()
{
   X::i++;
}

La syntaxe employée pour définir des espaces de noms est la suivante :

namespace identifier
{
   [ declaration-list ]
}

Un namespace-definition peut être imbriqué dans un autre namespace-definition. Chaque namespace-definition doit apparaître soit au niveau de la portée de fichier, soit immédiatement dans un autre namespace-definition.

Par exemple :

// namespace_declaration2.cpp
// C2870 expected
namespace A
{
   int j = 3;
   int f(int k);
}

namespace Outer
{
   int n = 6;
   int func(int num);

   namespace Inner
   {
      float f = 9.993;
   }
}

int main()
{
   namespace local   // C2870: not at global scope
   {
   }
}

À la différence d'autres zones déclaratives, la définition d'un espace de noms peut être fractionné sur plusieurs parties d'une même unité de traduction.

// namespace_declaration3.cpp
namespace A
{
   // declare namespace A variables
   int i;
   int j;
}

namespace B
{
}

namespace A
{
   // declare namespace A functions
   void func(void);
   int int_func(int i);
}

int main()
{
}

Lorsqu'un espace de noms est repris de cette manière, après sa définition initiale, la continuation est appelée une définition d'espace de noms d'extension. La définition d'origine de cet espace de noms est appelée une définition d'origine d'espace de noms.

L'utilisation de cette notation peut s'avérer fastidieuse avec des noms longs ou dans des programmes volumineux. La déclaration using, la directive using et les alias d'espace de noms offrent des moyens plus simples pour référencer les membres d'un espace de noms.

Une déclaration de namespace, qu'elle implique un espace de noms, un espace de noms sans nom ou une définition d'espace de noms étendu, doit être accompagnée d'un corps d'espace de noms placé entre accolades. L'instruction

namespace X;

est une erreur de syntaxe. L'instruction

namespace X{};

n'est pas une erreur de syntaxe, mais n'a aucune signification.

Pour obtenir des informations générales, consultez Espaces de noms.

L'identificateur dans une définition d'origine de l'espace de noms doit être unique dans la région déclarative dans laquelle il est utilisé. L'identificateur est le nom de l'espace de noms et est utilisé pour référencer ses membres.

La zone déclarative d'une définition d'espace de noms est son corps. Le corps doit être placé entre accolades ({}) et peut contenir des déclarations ou des définitions de variables, des fonctions, des objets, des modèles et des espaces de noms imbriqués. Les déclarations figurant dans declaration-list sont appelées les membres de l'espace de noms. Le nom de chaque membre de l'espace de noms est automatiquement qualifié par le nom de son espace de noms et l'opérateur de résolution de portée.

Voir aussi

Référence

Espaces de noms (C++)

Mots clés C++

Espaces de noms sans nom