Udostępnij za pośrednictwem


Obszary nazw (C++)

Język C++ zawiera pojedynczy globalnego obszaru nazw.Może to spowodować problemy z nazwy globalne kolizji.Na przykład należy wziąć pod uwagę te dwa pliki nagłówka C++:

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

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

Z tych definicji jest niemożliwe, można używać zarówno plików nagłówka w jednym programie; String klasy będą sprzeczne.

Obszar nazw jest deklaracyjne regionu, łączący identyfikator dodatkowe nazwy zadeklarowana wewnątrz niego.Identyfikator dodatkowe sprawia, że mniej prawdopodobne, że nazwy będzie w konflikcie z nazwami zadeklarowane w innych miejscach w programie.Jest to możliwe używać tej samej nazwy w różnych obszarach nazw bez konfliktu, nawet jeżeli nazwy są wyświetlane w tej samej jednostce tłumaczenia.Tak długo, jak pojawiają się w różnych obszarach nazw, każda nazwa będzie unikatowa ze względu na dodanie identyfikator obszaru nazw.Na przykład:

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

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

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

C++ nie zezwala na nazwy mieszanek dla obszarów 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 tłumaczenie poza wszystkie obszary nazw są nadal członków globalnej przestrzeni nazw.

Co chcesz wiedzieć więcej?

Zobacz też

Informacje

Deklaracje