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

Co chcete vědět více?

Viz také

Referenční dokumentace

Prohlášení