Unbenannte Namespaces
Sie können einen unbenannten Namespace als bessere Alternative zur Verwendung von globalen Deklarationen statischer Variablen deklarieren.
namespace { declaration-list }
Hinweise
Eine unbenannte Namespacedefinition, mit der oben gezeigten Syntax, verhält sich, als ob sie wieder ersetzt wird durch:
namespace unique { declaration-list }
mit Namespace unique;
Jeder unbenannte Namespace verfügt über einen Bezeichner, der vom Programm zugewiesen und beibehalten wird. Hier durch unique dargestellt, der sich von allen anderen Bezeichnern innerhalb des gesamten Programms unterscheidet. Beispiel:
// 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 guter Ersatz für die statische Deklaration von Variablen. Sie ermöglichen, dass Variablen und Funktionen innerhalb einer gesamten Übersetzungseinheit, jedoch nicht extern sichtbar sind. Obwohl Entitäten in einem unbenannten Namespace möglicherweise eine externe Bindung besitzen, werden sie effektiv über einen Namen qualifiziert, der für die Übersetzungseinheit eindeutig ist, und können daher nie aus einer anderen Übersetzungseinheit angezeigt werden.