Nienazwane przestrzenie nazw
Można zadeklarować nienazwaną przestrzeń nazw jako lepszą alternatywę dla wykorzystania globalnych deklaracji zmiennych statycznych.
namespace { declaration-list }
Uwagi
Definicja nienazwanej przestrzeni nazw o składni pokazanej powyżej zachowuje się tak, jakby została zastąpiona przez:
namespace unique { lista deklaracji }
using namespace unique;
Każda nienazwana przestrzeń nazw posiada identyfikator, przypisany i obsługiwany przez program, reprezentowany tutaj jako unique, który jest różny od innych identyfikatorów w obrębie całego programu.Na przykład:
// 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++
}
Nienazwane przestrzenie nazw są lepszym zastąpieniem dla statycznych deklaracji zmiennych.Pozwalają one, aby zmienne i funkcje były widoczne w całej jednostce tłumaczenia, ale nie były widoczne zewnętrznie.Mimo że jednostki w nienazwanej przestrzeni nazw mogą mieć zewnętrzne powiązania, są one skutecznie kwalifikowane przez nazwę unikatową dla ich tłumaczenia, a zatem nie mogą nigdy być widoczne z innej jednostki tłumaczenia.