Есть ли особая причина, по которой объявления вложенного пространства имен не разрешены в C ++?

Стандарт не допускает код, подобный этому:

namespace Hello::World {

//Things that are in namespace Hello::World

}

, и вместо этого требует

namespace Hello { namespace World {

//Things that are in namespace Hello::World

}}

Что такое обоснование? Было ли это просто не продумано в то время, или есть какая-то конкретная причина, по которой он не включен?

Кажется, что первый синтаксис более прямо выражает, в каком пространстве имен предполагается находиться, поскольку объявление имитирует фактическое использование пространство имен в последующем коде. Это также приводит к меньшему отступу, если вам не повезло использовать «тупой» инструмент отступа для подсчета скоб.

25
задан Rob Kennedy 30 August 2010 в 20:28
поделиться

4 ответа

Причина, скорее всего, "потому что так развивался язык".

Было как минимум одно предложение ("Предложение по определению вложенного пространства имен" в 2003 г.) разрешить вложенные определения пространств имен, но оно не было выбрано для включения в C++0x.

23
ответ дан 28 November 2019 в 20:46
поделиться

Я полагаю, вы бы предпочли, чтобы с учетом пространства имен X::Y оно было эквивалентно "пространству имен X {пространству имен Y`. На первый взгляд это звучит хорошо , но рассмотрим угловой случай:

namespace Hello {
   namespace {
      namespace World {}
   }
}

// Does this refer to an existing namespace? Or does it define a new one?
namespace Hello::World {}
12
ответ дан 28 November 2019 в 20:46
поделиться

Как я уже говорил в теме "возможный дубликат", в C++ полные имена зарезервированы для ссылки на ранее объявленные сущности. Это относится к обоим «источникам» полных имен: классам и пространствам имен.

2
ответ дан 28 November 2019 в 20:46
поделиться

Я думаю, что это был выбор дизайна.

Первый синтаксис выглядит хорошо. Я бы тоже хотел иметь. Однако второй вариант более структурирован. Вы не создаете вложенные пространства имен таким образом:

Hello::World::Everyone::Great {

}

Вы объявите это заранее?

0
ответ дан 28 November 2019 в 20:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: