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.