Udostępnij za pośrednictwem


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.

Zobacz też

Informacje

Przestrzenie nazw (C++)