Рассмотрим следующие два скалярных оператора в глобальной области видимости в следующей программе:
#включатьиспользуя пространство имен std;
int varId = 5;
float varId = 2.3;
int main ()
возврат 0;
Попытка скомпилировать эту программу приводит к ошибке компиляции. Есть две переменные с одинаковым именем, varId. Хотя это две разные переменные двух разных типов, int а также плавать, компилятор отклоняет два объявления, потому что они имеют одно и то же имя. Следующая программа решает эту проблему, объявляя переменные с одинаковыми именами в двух разных обобщенных областях:
#включатьиспользуя пространство имен std;
пространство имен NA
int varId = 5;
пространство имен NB
float varId = 2.3;
int main ()
cout << NA::varId << '\n';
cout << NB::varId << '\n';
возврат 0;
Результат выглядит следующим образом:
52.3
В приведенной выше программе есть два пространства имен: NA, который имеет определение целого числа, и NB, который имеет определение числа с плавающей запятой, но с тем же именем, что и целое число для NA. Наконец, при запуске программы использовалось одно и то же имя для двух разных переменных. Обратите внимание, что для доступа к одному и тому же имени двух разных переменных необходимо использовать конкретное имя для пространства имен, за которым следует общий идентификатор. Имя пространства имен и общий идентификатор разделяются оператором разрешения области «::.»Имя пространств имен будет различать объекты.
В этой статье рассматривается основная концепция пространства имен и его использование в языке программирования C ++. Чтобы следовать этой статье, вы должны иметь базовые знания языка C ++. Вы также должны знать область действия C ++, хотя она кратко объясняется в этой статье. Чтобы узнать больше о области действия C ++, найдите фразу «Область действия в C ++» (без кавычек) в поле поиска любого linuxhint.com и нажмите Enter. Это приведет вас к статье, написанной этим автором.
Содержание статьи
- Что такое пространство имен?
- Директива использования
- Вложенные пространства имен
- Стандартное пространство имен
- Заключение
Что такое пространство имен?
Декларативная область - это самая большая часть программы, в которой допустимо имя сущности (переменной). Эта область называется областью. Пространство имен в C ++ - это обобщенная область видимости, основной целью которой является разрешение конфликтов имен. Пространство имен имеет базовые объявления и / или определения сущностей.
Глобальное пространство имен и его проблема
Глобальное пространство имен - это глобальная область видимости. Рассмотрим следующую короткую программу:
#включатьиспользуя пространство имен std;
int идент = 55;
плавающий идентификатор = 12.17;
int main ()
возврат 0;
В приведенной выше программе есть две переменные, обе называются Идентификатор. Эти переменные находятся в глобальной области видимости; то есть они находятся в глобальном пространстве имен. Попытка скомпилировать эту программу завершится ошибкой с сообщением об ошибке. Глобальная область не принимает более одной переменной с одинаковым именем, поэтому существует необходимость в настраиваемом пространстве имен.
Пользовательское пространство имен
Пространство имен не имеет только одного имени. Вместо этого пространство имен имеет набор имен, чтобы избежать конфликта с другими наборами имен. Чтобы избежать конфликта ниже в коде, перед каждым именем ставьте имя пространства имен и :: . Следующая программа иллюстрирует это с помощью двух настраиваемых пространств имен:
#включатьиспользуя пространство имен std;
пространство имен NA
int varInt = 6;
float flt;
пространство имен NB
int varInt = 7;
float flt;
int main ()
cout << NA::varInt << '\n';
cout << NB::varInt << '\n';
NA :: flt = 2.5;
NB :: flt = 4.8;
cout << NA::flt << '\n';
cout << NB::flt << '\n';
возврат 0;
Результат:
67
2.5
4.8
Обратите внимание, что имена NA :: flt а также NB :: flt в конечном итоге были определены в основной() функция. C ++ не допускает такого определения в глобальной области видимости.
Обратите внимание, что настраиваемое пространство имен является вложенным пространством имен для глобального пространства имен.
Директива использования
Чтобы не вводить все время «namepace :: name» вместо просто «name» после объявления пространства имен, вы можете использовать с использованием директива. Синтаксис для использования с использованием директива выглядит следующим образом:
using пространство имен Namespace_name;В с использованием Директива не является директивой препроцессора, поэтому заканчивается точкой с запятой (;).
Следующая программа иллюстрирует использование с использованием директива и многое другое:
#включатьиспользуя пространство имен std;
пространство имен NB
int varInt = 7;
int func ()
return varInt;
int fn ()
с использованием пространства имен NB;
int myVar2 = func ();
// другие объекты и функции из NB следуют.
return myVar2;
int myVar3 = NB :: func ();
int main ()
cout << fn() << " << myVar3 << '\n';
возврат 0;
Результатом этой программы будет 7 7. Термин "с использованием пространства имен NB;»Был помещен в начало fn () определение. В func () из пространства имен NB вызывается чуть ниже, без предшествующего символа «NB ::.”
Переменная, объявленная в глобальной области (глобальном пространстве имен), видна от точки объявления до конца файла. Это также видно во вложенных пространствах имен (вложенных областях), таких как вложенные fn () объем функции выше. В с использованием Директива присоединяется к своему пространству имен от позиции, в которой она размещена, до конца области, в которой она размещена.
Название func () из пространства имен NB не отображается под fn () определение, потому что «используя пространство имен NB; " был помещен в область действия функции (блок). При этом условии, чтобы использовать "func ()»Вне блока (области) пространства имен NB, ему должен предшествовать«NB ::,»Как в следующем заявлении:
int myVar3 = NB :: func ();В с использованием Директива объединяет свое пространство имен с внешним пространством имен вложенности от позиции, в которой она размещена, до конца внешнего пространства имен вложенности. В следующей программе пространство имен NA объединено с глобальным пространством имен. Оба пространства имен затем расширяются в fn () пространство имен определения функции, в котором они объединены с пространством имен NB. Пространство имен NB заканчивается в конце fn () определение функции, и два предыдущих пространства имен продолжаются до конца файла (читается через код).
#включатьиспользуя пространство имен std;
пространство имен NA
int varInt = 6;
int func ()
return varInt;
пространство имен NB
int varInt = 7;
int func ()
return varInt;
с использованием пространства имен NA;
int myVar0 = varInt;
// другие объекты и функции из :: и NB следуют.
int fn ()
int myVar1 = varInt;
с использованием пространства имен NB;
int myVar2 = NB :: func ();
// другие объекты и функции из NB следуют до конца этой области.
return myVar1 + myVar2;
// Следуют только объекты и функции из :: и NB.
int myVar3 = NB :: func ();
int main ()
cout << myVar0 << " << fn() << " << myVar3 << '\n';
возврат 0;
На выходе 6, 13, 7.
Примечание: Глобальное пространство имен обозначено :: , означает, что перед оператором разрешения области, который следует за.
Под заявлением стоит знак «с использованием пространства имен NA;»Переменные из глобального пространства имен и пространства имен NA могут использоваться без указания их исходного пространства имен. В следующем заявлении используется varInt пространства имен NA. Область объединенного пространства имен global и NA простирается на fn () пространство имен функций. Итак varInt первого заявления в fn () область действия функции, относится к пространству имен NA.
Поскольку регион для пространств имен global и NA простирается на fn () область действия после знака «int myVar2 = NB :: func ();,»Любое имя из пространства имен NB может использоваться только в fn () область, не ставя перед ним "NB ::,”Только если это не произошло в NA и глобальных пространствах имен (блоках). В противном случае перед ним должен стоять «NB ::.»Область объединенных пространств имен для NA и global продолжается ниже fn () определение и в основной() функция до конца файла.
Расширение пространства имен NB начинается с «int myVar2 = NB :: func ();" в fn () блок и заканчивается в конце fn () блок определения.
Примечание: Пространства имен, регионы которых соединяются, не должны иметь одинаковые имена переменных в разных блоках пространств имен, так как это все равно вызовет конфликт.
Области пространства имен
Пространство имен - это область видимости. Помимо глобального пространства имен (глобальная область видимости), любое пространство имен должно быть объявлено в блоке. Этот блок является первой частью из возможных распределенных областей пространства имен. С помощью директивы using пространство имен может быть расширено как регионы в других областях.
Объекты, объявленные в теле пространства имен, называются членами пространства имен, а имена, введенные этими объявлениями в декларативную область пространства имен, называются именами членов пространства имен.
Вложенные пространства имен
Следующая программа показывает вложенные пространства имен:
#включатьиспользуя пространство имен std;
пространство имен A
int я = 1;
пространство имен B
int я = 2;
пространство имен C
int я = 3;
int main ()
cout << A::i << " << A::B::i << " << A::B::C::i << '\n';
возврат 0;
Результат:
1 2 3Обратите внимание, что доступ к трем значениям был осуществлен с помощью оператора разрешения области видимости.
Стандартное пространство имен
В C ++ есть библиотека, называемая стандартной библиотекой. Имена объектов, функций и других сущностей в этой библиотеке взяты из пространства имен, называемого стандартным пространством имен, записанного как стандартное. Стандартная библиотека содержит подбиблиотеки, и одна из этих подбиблиотек iostream. В iostream библиотека содержит объект cout, который используется для отправки результатов на консоль (терминал).
Название cout должен быть в стандартное пространство имен. Использовать iostream с этими стандартное пространство имен, программа должна быть следующей:
#включатьиспользуя пространство имен std;
Обратите внимание на использование с использованием директива и стандартное. Термин "#включать
Заключение
Пространство имен - это область видимости. Описание (определение) пространства имен содержит базовые объявления и / или определения объектов, функций и других сущностей C ++. Вне определения пространства имен к имени можно получить доступ с помощью синтаксиса «namespaceName :: имя.”Помимо глобального пространства имен (глобальная область видимости), любое пространство имен должно быть объявлено в блоке. Этот блок является первой частью из возможных распределенных областей пространства имен. С с использованием директиве, пространство имен может быть расширено как регионы в других областях. Пространства имен, регионы которых объединены, не должны иметь одинаковые имена переменных в разных блоках пространств имен, так как это все равно вызовет конфликт имен.
Chrys