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

Я заметил, что в пространствах имен C++ очень редко используются, в то время как в .NET это очень распространено. Есть ли какая-то конкретная причина этого.

Также я хотел бы знать, видели ли другие, что пространства имен обычно используются в C++.

Править: На самом деле я обращаюсь к пользовательским приложениям и не стандартным библиотекам как STL или любая другая вещь.

7
задан ckv 2 August 2010 в 16:02
поделиться

9 ответов

В C ++ пространства имен были добавлены к языку через некоторое время после первоначальной реализации, поэтому было много кода приложения, который их не использовал. Итак, в том числе из-за их позднего добавления, вся стандартная библиотека была помещена в одно пространство имен. Следовательно, с помощью простого using namespace std; вы можете в значительной степени игнорировать пространства имен, если хотите.

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

11
ответ дан 6 December 2019 в 07:49
поделиться

Я заметил, что в пространствах имен C ++ очень редко используются

. Можете ли вы подтвердить это соответствующими эмпирическими исследованиями? Boost , Qt , STL, ... все используют пространства имен.

3
ответ дан 6 December 2019 в 07:49
поделиться

Одна из причин заключается в том, что некоторые популярные компиляторы (в частности, gcc) довольно поздно добавили поддержку пространств имен, и для большей переносимости многие проекты запускались без пространств имен. Конечно, для нового проекта не использовать пространства имен было бы странно.

1
ответ дан 6 December 2019 в 07:49
поделиться

Пространства имен - ваш лучший друг в больших проектах!

Видно или нет - неважно. Возьмите за привычку использовать их.

0
ответ дан 6 December 2019 в 07:49
поделиться

Библиотеки Boost C ++ широко используют пространства имен.

-1
ответ дан 6 December 2019 в 07:49
поделиться

Пространства имен в C ++ совсем не то же самое, что в .Net, ActionScript и Java (которые разделяют ту же концепцию). Это совсем не одно и то же.

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

В .Net, ActionScript и Java пространства имен больше связаны с модулями, чем с именами. Они вынуждают разработчика организовать свой код в отдельных пространствах имен, каждое из которых связано с одной целью, контекстом. Поскольку эти языки являются динамическими (вместо статических, как C ++), пространства имен допускают позднюю привязку типов к коду, что ускоряет компиляцию, потому что вам нужно только иметь каноническое имя (пространство имен + имя) типа, который вы хотите использовать в файле. .

В C ++ нет модуля comcept, только единицы компиляции, которые ничего не знают друг о друге.

Теперь об их использовании. Часто хорошей практикой является использование пространства имен в C ++ для инкапсуляции модуля (исполняемого файла или dll / so), некоторого кода реализации или любой полезной части кода. Тем не менее, в большинстве случаев лучше не иметь слишком глубокой иерархии пространств имен. По историческим причинам многие разработчики C ++ в течение очень долгого времени даже не знали, что C ++ имеет функцию, называемую пространством имен. То, что мы называем «современным C ++», предполагает, что вы знаете об этом, но много старого кода C ++ все еще используется сегодня, и, возможно, это то, на что вы смотрите, когда говорите о пространствах имен.

Пространства имен в C ++ - особенность, отличная от других языков, делает их написание более или менее очевидным в коде.Фактически, он настолько отличается, что вы вообще не будете управлять им таким же образом, что делает код действительно трудным для понимания, когда вы, скажем, исходите из .Net. Таким образом, вы не должны одинаково использовать пространства имен между языками, это действительно разные концепции.

7
ответ дан 6 December 2019 в 07:49
поделиться

Самый простой ответ: когда вы запускаете программу в Visual Studio (2003 и новее), она создает пространства имен по умолчанию. Я полагаю, что других (более старых) IDE нет.

.NET поощряла это с самого начала. Пространства имен не всегда были частью исходной реализации на C ++. Он приобрел популярность с .Net.

2
ответ дан 6 December 2019 в 07:49
поделиться

По прошествии времени я вижу, что все больше и больше кодов C ++ осмысленно используют пространства имен. Возможно, вы наблюдали сохраняющиеся эффекты стиля программирования c-with-classes ...

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

0
ответ дан 6 December 2019 в 07:49
поделиться

Работая в 5 разных местах, я могу сказать, что 2 из 5 использовали пространства имен до того, как я присоединился.

Я полагаю, что пространства имен в C ++ используются не так часто (как следовало бы?) Из-за того, что синтаксис слишком громоздкий.

то есть: я хочу написать это:

пространство имен xml :: xmpp :: core {}

Но вместо этого нужно написать следующее:

пространство имен xml {пространство имен xmpp {пространство имен ядро ​​{}}}

И для пересылки объявления я хотел бы написать:

class xml :: parser;

Но нужно написать

namespace xml {class parser; }

Но я могу написать:

using namespace xml :: xmpp :: core;

С другой стороны, может ли кто-нибудь сказать мне, почему классы должны завершаться точкой с запятой, а что-либо еще ( функции, пространства имен) нет?

0
ответ дан 6 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

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