Unbenannte Namespaces
Sie können einen unbenannten Namespace als überlegene Alternative zur Verwendung von globalen Deklarationen der statischen Variablen deklarieren.
namespace { declaration-list }
Hinweise
Eine unbenannte Namespacedefinition, die die Syntax oben anzeigen können, verhält sich, als ob sie wieder ersetzt wurde:
*Eindeutige **{**DeklarationListe *} Namespace
anhand des Namespace eindeutig.
Jeder unbenannte Namespace verfügt über einen Bezeichner zugewiesen, und hier vom Programm beibehalten und über eindeutigedargestellt, der von allen anderen Bezeichnern innerhalb des gesamten Programm unterscheidet.Beispiele:
// 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++
}
Unbenannte Namespaces sind ein überlegener Ersatz für die statische Deklaration von Variablen.Sie können Variablen und Funktionen, die sichtbar innerhalb einer gesamten Übersetzungseinheit, jedoch nicht extern sichtbar ist.Obwohl Entitäten möglicherweise in einem unbenannten Namespace externe Bindung besitzen, werden sie effektiv über einen Namen qualifiziert, der zu der Übersetzungseinheit eindeutig ist und können daher nie aus einer anderen Übersetzungseinheit angezeigt werden.