Obory názvů (C++)
Jazyk C++ poskytuje jeden globální obor názvů.To může způsobit problémy s globálními střety názvů.Zvažte tyto dva soubory hlaviček C++:
char func(char);
class String { ... };
// somelib.h
class String { ... };
S těmito definicemi není možné používat oba soubory hlaviček v jednom programu. Třídy String budou kolidovat.
Obor názvů je deklarativní oblast, která připojí další identifikátor ke kterémukoli uvnitř deklarovanému názvu.Další identifikátor snižuje pravděpodobnost, že název bude kolidovat s názvy deklarovanými jinde v programu.Je možné bez konfliktu použít stejný název v samostatných oborech názvů i v případě, že se názvy objeví ve stejné jednotce překladu.Tak dlouho, dokud jsou uvedeny v samostatných oborech názvů, bude každý název jedinečný z důvodu přidání identifikátoru oboru názvů.Příklad:
namespace one {
char func(char);
class String { ... };
}
// somelib.h
namespace SomeLib {
class String { ... };
}
Nyní nebudou názvy tříd kolidovat, jelikož se stanou one::String a SomeLib::String.
C++ nepovoluje složené názvy pro obory názvů.
// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
namespace b {
int i;
}
}
// not allowed
namespace c::d { // C2653
int i;
}
Deklarace v rozsahu souboru jednotky překladu, mimo všechny obory názvů, jsou stále členy globálního oboru názvů.