Объявление namespace

Объявление namespace определяет и присваивает объявленному пользователем пространству имен уникальное имя.

namespace identifier

Заметки

Такие пространства имен используются для устранения проблемы конфликтов имен в больших программах и библиотеках. Программисты могут использовать пространства имен для разработки новых программных компонентов и библиотек, не вызывая конфликтов имен с существующими компонентами.

Например:

// namespace_declaration1.cpp
namespace X
{
   int i;
   double j;
}
int main()
{
   X::i++;
}

Синтаксис определения пространства имен следующий:

namespace identifier
{
   [ declaration-list ]
}

Определение-пространства-имен может быть вложенным в другое определение-пространства-имен. Каждое определение-пространства-имен должно находиться либо в области видимости файла, либо непосредственно внутри другого определения-пространства-имен.

Например:

// namespace_declaration2.cpp
// C2870 expected
namespace A
{
   int j = 3;
   int f(int k);
}

namespace Outer
{
   int n = 6;
   int func(int num);

   namespace Inner
   {
      float f = 9.993;
   }
}

int main()
{
   namespace local   // C2870: not at global scope
   {
   }
}

В отличие от других областей объявлений, определение пространства имен может быть расположено в нескольких частях одной записи преобразования.

// namespace_declaration3.cpp
namespace A
{
   // declare namespace A variables
   int i;
   int j;
}

namespace B
{
}

namespace A
{
   // declare namespace A functions
   void func(void);
   int int_func(int i);
}

int main()
{
}

Если определение пространства имен продолжается таким образом после его начального определения, продолжение называется расширенным определением пространства имен. Начальное определение такого пространства имен называется исходным определением пространства имен.

Использование такого формата с длинными именами и в больших программах может быть громоздким. Объявление using, директива using и псевдонимы пространств имен обеспечивают более простые способы ссылок на члены пространств имен.

После объявления namespace независимо от того, включает ли оно новое пространство имен, неименованное пространство имен или расширенное определение пространства имен, должно следовать тело пространства имен, заключенное в фигурные скобки. Оператор

namespace X;

представляет собой синтаксическую ошибку. Оператор

namespace X{};

не содержит синтаксической ошибки, но не имеет смысла.

Базовые сведения см. в разделе Пространства имен.

Идентификатор в исходном определении пространства имен должен быть уникальным в области объявления, в которой он используется. Идентификатор — это имя пространства имен и используется для ссылки на его члены.

Область объявления определения пространства имен является его телом. Тело должно быть заключено в фигурные скобки ({}) и может содержать объявления или определения переменных, функций, объектов, шаблонов и вложенных пространств имен. Считается, что объявления в списке-объявлений являются членами пространства имен. Имя каждого члена пространства имен автоматически определяется именем его пространства имен и оператором разрешения области видимости.

См. также

Ссылки

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

Ключевые слова в C++

Безымянные пространства имен