Udostępnij za pośrednictwem


Przestrzenie nazw (C++)

Język C++ dostarcza pojedynczą globalną przestrzeń nazw.Może to powodować problemy z kolizjami nazw globalnych.Rozważmy na przykład, te dwa pliki nagłówkowe C++:

char func(char);
class String { ... };

// somelib.h
class String { ... };

Z tymi definicjami, niemożliwe jest użycie obu plików nagłówkowych w jednym programie; klasy String będą w konflikcie.

Przestrzeń nazw jest regionem deklaracyjnym dołączającym dodatkowy identyfikator do każdej nazwy zadeklarowanej wewnątrz niego.Identyfikator dodatkowy zmniejsza prawdopodobieństwo, że nazwa znajdzie się w konflikcie z nazwami zadeklarowanymi w innych miejscach programu.Użytkownik może użyć tej samej nazwy w oddzielnych przestrzeniach nazw bez konfliktu, nawet jeśli nazwy pojawiają się w tej samej jednostce translacji.Tak długo, jak pojawiają się w osobnych przestrzeniach nazw, każda nazwa będzie unikatowa ze względu na dodanie identyfikatora przestrzeni nazw.Na przykład:

namespace one {
   char func(char);
   class String { ... };
}

// somelib.h
namespace SomeLib {
   class String { ... };
}

Teraz nazwy klas nie będą ze sobą w konflikcie, ponieważ stają się odpowiednio one::String i SomeLib::String.

C++ nie zezwala na nazwy złożone dla przestrzeni nazw.

// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
   namespace b {
      int i;
   }
}

// not allowed
namespace c::d {   // C2653
   int i;
}

Deklaracje w zakresie pliku jednostki translacji, poza wszystkimi przestrzeniami nazw, są nadal elementami członkowskimi globalnej przestrzeni nazw.

O czym chcesz się dowiedzieć więcej?

Zobacz też

Informacje

Deklaracje