Пространства имен (C++)

Язык C++ предоставляет одно глобальное пространство имен.Это может привести к проблемам с глобальной столкновениями имени.Например, рассмотрим эти 2 файла заголовка C++:

char func(char);
class String { ... };

// somelib.h
class String { ... };

С этими определениями, невозможно использовать оба файла заголовков в одной программе. String классы столкнутся.

Пространство имен декларативная область, вложение дополнительный идентификатор к любым именам объявлены внутри него.Дополнительный идентификатор делает его меньше вероятность того, что имя будет конфликтовать с именами, объявленные в другом месте в программе.Можно использовать одно и то же имя в разных пространствах имен без конфликта, даже если имена отображаются в одну и ту же единицу.При условии, что они отображаются в отдельном пространстве имен, каждое имя будет уникальным, из-за добавления идентификатора пространства имен.Примеры.

namespace one {
   char func(char);
   class String { ... };
}

// somelib.h
namespace SomeLib {
   class String { ... };
}

Теперь имена классов не столкнутся, поскольку они становят one::String и SomeLib::Stringсоответственно.

C++ не позволяет использовать составные имена пространств имен.

// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
   namespace b {
      int i;
   }
}

// not allowed
namespace c::d {   // C2653
   int i;
}

Объявления в области файла единицы измерения смещения вне любых пространств имен, все еще являются членами глобального пространства имен.

Дополнительные сведения

См. также

Ссылки

Объявления