Sdílet prostřednictvím


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ů.

O čem chcete vědět více?

Viz také

Referenční dokumentace

Deklarace