Obory názvů (C++)
Jazyk C++ poskytuje jeden globální obor názvů.To může způsobit problémy s názvem globální střetům.Zvažte například tyto dva soubory jazyka C++ záhlaví:
char func(char);
class String { ... };
// somelib.h
class String { ... };
Pomocí těchto definic je nemožné použít oba soubory záhlaví v jednom programu; String bude kolidovat tříd.
Obor názvů je deklarativní oblasti, kterou připojí další identifikátor na všechny názvy deklarované uvnitř.Další identifikátor je méně pravděpodobné, že název koliduje s názvy deklarováno kdekoliv v programu.Je možné použít stejný název v samostatné obory názvů bez konfliktu i v případě, že názvy se zobrazí ve stejné jednotce překlad.Co jsou zobrazeny v samostatných oborů 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í názvy tříd nesmí kolidovat, protože se stanou one::String a SomeLib::String, resp..
C++ neumožňuje 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;
}
Prohlášení v rozsahu souboru převodu jednotky, mimo všechny obory názvů jsou stále Členové globální obor názvů.