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.