2016-05-20 4 views
1

Стандарт C говорит:Что такое пространства имен тегов?

7.1.3 Зарезервированные идентификаторы
Все идентификаторы, начинающиеся с символа подчеркивания всегда зарезервированы для использования в качестве идентификаторов с области файла в обоих простых и тегов пространств имен.

Что такое «пространства имен тегов»?

Является следующее обозначенное пространство имен?

struct T{}; 

Это просто имя типа структуры?
Переводит ли эта терминология на C++?

+1

http://en.cppreference.com/ w/c/language/name_space – mindriot

+1

6.2.3 говорит о «пространствах имен тегов» – user6362820

+2

Это «обычное» пространство имен и пространство имен «тег-имя» (T в структуре T {} является «именем тега»). C++ не имеет имен тегов. –

ответ

5

От cppreference:

С позволяет более чем одно объявление для того же идентификатор, чтобы находиться в области видимости одновременно, если эти идентификаторы принадлежат к разным категориям, называемые пространства имен:

  1. Этикетка Название пространство: все идентификаторы, объявленные как метки.
  2. Имена тегов: все идентификаторы, объявленные как имена структур, союзов и перечисляемых типов. Обратите внимание: все три типа тегов разделяют одно пространство имен.
  3. Имена участников: все идентификаторы, объявленные как члены какой-либо одной структуры или объединения. Каждая структура и объединение представляют свое собственное пространство имен такого рода.
  4. Все остальные идентификаторы, называемые обычными идентификаторами, отличающиеся от (1-3) (имена функций, имена объектов, имена typedef, константы перечисления).

Так, T это имя структуры и в том же пространстве имен, как и другие «метки», но не в том же пространстве имен, как, скажем, этикетки. Например, вы можете иметь метку с именем T в том же объеме.

2

Переводит ли эта терминология на C++?

Нет «Имена тегов» не упоминаются в стандарте C++, за исключением в информационном приложении C++ and ISO C где имена тегов обсуждаются в контексте С.

Смежные вопросы