Espaces de noms sans nom
Vous pouvez déclarer un espace de noms sans nom comme alternative avantageuse à l'utilisation des déclarations globales de variables statiques.
namespace { declaration-list }
Notes
La définition d'un espace de noms sans nom avec la syntaxe ci-dessus se comporte comme si elle était remplacée par :
namespace unique { declaration-list }
using namespace unique;
Chaque espace de noms sans nom possède un identificateur, assigné et géré par le programme, et représenté ici par unique, qui diffère de tous les autres identificateurs dans l'ensemble du programme. Par exemple :
// unnamed_namespaces.cpp
// C2872 expected
namespace { int i; } // unique::i
void f() { i++; } // unique::i++
namespace A {
namespace {
int i; // A::unique::i
int j; // A::unique::j
}
}
using namespace A;
void h()
{
i++; // C2872: unique::i or A::unique::i
A::i++; // A::unique::i++
j++; // A::unique::j++
}
Les espaces de noms sans nom constituent une substitution avantageuse de la déclaration statique des variables. Ils permettent aux variables et aux fonctions d'être visibles au sein d'une unité de traduction complète, mais non visibles à l'extérieur. Les entités figurant dans un espace de noms sans nom peuvent posséder une liaison externe, mais elles sont effectivement qualifiées par un nom unique à leur unité de traduction et ne peuvent donc jamais être vues à partir de toute autre unité de traduction.