ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4281
Скачиваний: 28
Глава 12. Пространства имен
161
{
int n = 10;
cout << n; // печатает 10
return 0;
}
Объявление
using
может также использоваться для вложенных
пространств имен.
В листинге 12.7 приведен пример использования объявления
using
для вложенных пространств имен.
Листинг 12.7. Использование объявления
using
с вложенными пространствами имен
#include <iostream>
using std::cout;
namespace PublicNames
{
namespace MyNames
{
int add(int a, int b) { return a + b; }
}
}
int main()
{
using PublicNames::MyNames::add;
cout << add(2,3); // печатает 5
return 0;
}
12.6. Директива
using
Для объявления сразу всех имен из некоторого пространства
имен используется директива
using
, которая имеет следующий
синтаксис:
using namespace имя_пространства_имен;
В листинге 12.8 приведен пример использования директивы
using
.
Часть II. Язык программирования С++
162
Листинг 12.8. Использование директивы
using
#include <iostream>
using namespace std;
int main()
{
cout << "Hello word" << endl;
return 0;
}
Правила использования директивы
using
совпадают с правилами
использования объявления
using
. Но при этом следует учитывать,
что директива
using
для вложенного пространства имен не объ-
являет имена из объемлющего пространства имен.
12.7. Псевдонимы
Чтобы избежать дублирования имен, для пространства имен мо-
жет быть выбрано длинное имя. В этом случае для удобства запи-
си этого длинного имени также определяют короткий
псевдоним
,
который обычно является сокращением от полного имени про-
странства имен. Псевдоним используется в тех исходных файлах,
которые заведомо не содержат имен, совпадающих с псевдони-
мом. Объявление псевдонима имеет следующий синтаксис:
namespace псевдоним = имя_пространства_имен;
Псевдоним используется точно так же, как и само имя простран-
ства имен.
В листинге 12.9 приведен пример использования псевдонима для
имени пространства имен.
Листинг 12.9. Использование псевдонима для имени
пространства имен
#include <iostream>
using namespace std;
namespace Very_Important_Namespace
Глава 12. Пространства имен
163
{
int n = 1;
}
namespace VIN = Very_Important_Namespace;
int main()
{
cout << VIN::n << endl; // печатает 1
return 0;
}
Псевдоним можно определять и для имен вложенных про-
странств имен. Например:
namespace Names = PublicNames::MyNames;
Кроме того, одно пространство имен может иметь несколько
псевдонимов, например:
namespace N = Names;
namespace M = Names;
namespace L = M;
12.8. Искажение имен переменных
Для реализации оператора разрешения области видимости ком-
пилятор добавляет к внутреннему имени переменной дополни-
тельные символы, которые определяют пространство имен пере-
менной. Такое именование переменных называется
декориро-
ванием
(decorating) или
искажением
(mangling)
имен переменных
.
Так же как и декорирование имен функций, декорирование имен
переменных не стандартизировано. Поэтому в каждом компиля-
торе определяется свой порядок декорирования имени перемен-
ной.
Как и в случае с функциями, для обращения в программе, напи-
санной на языке программирования С++, к имени переменной,
определенной в объектном модуле, полученном при помощи
компилятора языка программирования C, нужно использовать
спецификацию связывания
, которая имеет следующий синтаксис:
extern "C" имя_переменной
Часть II. Язык программирования С++
164
или:
extern "C"
{
// блок объявления имен
}
Например, предположим, что в программе на языке программи-
рования С++ используется переменная
n
типа
int
из объектной
библиотеки, разработанной на языке программирования С.
Тогда, в этой программе, для разрешения связей между объект-
ными модулями нужно использовать спецификацию связывания:
extern "C" int n;
Г Л А В А
13
Обработка исключений
13.1. Механизм обработки
исключений
Механизм обработки исключений (исключительных ситуаций)
предназначен для передачи управления при возникновении таких
ситуаций во время исполнения программы, которые не могут
быть разрешены на месте их возникновения. Механизм обра-
ботки исключений построен на базе следующих четырех компо-
нентов:
исключение;
выражение
throw
;
блок
try
;
блок
catch
.
Синтаксически
исключение
(exception) представляет собой объект
произвольного типа. Этот объект используется для идентифика-
ции ситуации, которая требует обработки.
Исключение
генерируется
или, как еще говорят,
выбрасывается
выражением
throw
, которое имеет следующий вид:
trow выражение
Результатом вычисления
выражения
является объект, который
представляет исключение.