Язык программирования C++. Пятое издание - Стенли Липпман
Шрифт:
Интервал:
Закладка:
Термины
Безымянное пространство имен (unnamed namespace). Пространство имен, определенное без имени. К именам, определенным в безымянном пространстве имен, можно обращаться непосредственно, без оператора области видимости. Каждый файл имеет собственное, уникальное безымянное пространство имен. Имена в файле невидимы вне данного файла.
Блок try (try block). Блок операторов, начинающийся ключевым словом try и содержащий одну или несколько директив catch. Если код в блоке try передает исключение и одна из директив catch соответствует типу переданного исключения, то переданное исключение будет обработано этим обработчиком. В противном случае исключение будет передано из блока try другому обработчику, далее по цепи вызовов.
Блок try функции (function try block). Используется для обработки исключений из списка инициализации конструктора. Ключевое слово try располагается перед двоеточием, начинающим список инициализации конструктора (или перед открывающей фигурной скобкой тела конструктора, если список инициализации пуст), и завершается одной или несколькими директивами catch, которые следуют после закрывающей фигурной скобки тела конструктора.
Виртуальное наследование (virtual inheritance). Форма множественного наследования, при котором производные классы совместно используют одну копию экземпляра базового класса, даже если в иерархии он встречается несколько раз.
Виртуальный базовый класс (virtual base class). Базовый класс, при наследовании которого было использовано ключевое слово virtual. В объекте производного класса часть виртуального базового класса содержится только в одном экземпляре, даже если в иерархии этот класс присутствует несколько раз. При не виртуальном наследовании конструктор может инициализировать только непосредственный базовый класс (классы). При виртуальном наследовании этот класс мог бы быть инициализирован несколькими производными классами, которые должны предоставить инициализирующие значения для всех его виртуальных предков.
Выражение throw е (передача исключения). Выражение, которое прерывает текущий поток выполнения. Каждый оператор throw передает управление ближайшему окружающему блоку catch, который способен обработать исключение переданного типа. Выражение е будет скопировано в объект исключения.
Глобальное пространство имен (global namespace). Неявное пространство имен, содержащее все определения глобальных объектов, которыми обладает каждая программа.
Директива catch (catch clause). Часть программы, которая обрабатывает исключение. Директива обработчика состоит из ключевого слова catch, за которым следуют объявление исключения и блок операторов. Код в блоке catch предназначен для обработки исключений типа, указанного в его объявлении.
Директива using (using directive). Объявление в форме using NS; делает все имена пространства имен NS доступными в ближайшей области видимости, содержащей и директиву using, и само пространство имен.
Загромождение пространства имен (namespace pollution). Термин, используемый для описания ситуации, когда все имена классов и функций располагаются в глобальном пространстве имен. Большие программы, использующие код, который создан несколькими независимыми производителями, зачастую сталкиваются с конфликтами имен, если эти имена глобальны.
Множественное наследование (multiple inheritance). Наследование, при котором класс имеет несколько непосредственных базовых классов. Производный класс наследует члены всех своих базовых классов. Имена нескольких базовый классов указываются в списке наследования класса. Для каждого базового класса может быть предоставлен отдельный спецификатор доступа.
Обработка исключений (exception handling). Механизм уровня языка, предназначенный для ликвидации аномалий времени выполнения. Один независимо разработанный раздел кода может обнаружить проблему и передать исключение, которое может получить и обработать другая независимо разработанная часть программы. Часть кода, обнаруживающая ошибку, передает исключение, а часть кода, получающая его, осуществляет обработку.
Обработчик (handler). Синоним директивы catch.
Обработчик для всех исключений (catch-all). Директива catch, в которой объявляется исключение. Директива обработчика для всех исключений обрабатывает исключения любого типа. Обычно он используется для предварительной обработки исключения, осуществляемой локально. Затем исключение повторно передается другой части программы, в которой и осуществляется устранение причины проблем.
Объект исключения (exception object). Объект, используемый для передачи сообщения между блоками throw и catch. Объект создается в точке передачи и является копией использованного выражения. Объект исключения существует, пока не сработает последний обработчик для его типа. Тип объекта соответствует типу использованного выражения.
Объявление using (using declaration). Механизм, позволяющий ввести одно имя из пространства имен в текущую область видимости. using std::сout;. Это объявление сделает имя cout из пространства имен std доступным в текущей области видимости, благодаря чему имя cout можно применять без спецификатора std::.
Объявление исключения (exception declaration). Объявление директивы catch, определяющее тип обрабатываемого исключения. Объявление действует как список параметров, каждый параметр которого инициализируется объектом исключения. Если спецификатор исключения имеет не ссылочный тип, то объект исключения копируется в обработчик.
Оператор noexcept. Оператор, возвращающий тип bool и указывающий, способно ли данное выражение передать исключение. Выражение не вычисляется. Результат — константное выражение. Его значение true, если выражение не содержит оператора throw и вызывает только те функции, которые не передают исключений; в противном случае результат — false.
Оператор области видимости (scope operator). Оператор (::) используется для доступа к именам пространства имен или класса.
Передача (raise). Синоним термина "throw" (передача). Программисты С++ используют термины "throwing" и "raising" как синонимы, означающие передачу исключения.
Повторная передача исключения (rethrow). Пустой оператор throw повторно передает объект исключения. Повторная передача возможна только из блока catch (обработчика) или из функции, прямо или косвенно вызываемой обработчиком. В результате будет повторно передан полученный ранее объект исключения.
Порядок выполнения конструкторов (constructor order). При не виртуальном наследовании части базовых классов строятся в том порядке, в котором они указаны в списке наследования класса. При виртуальном наследовании часть виртуального базового класса (классов) создается прежде любых других базовых классов. Они создаются в порядке расположения в списке наследования производного класса. Только самый последний производный тип может инициализировать виртуальный базовый класс; списки инициализации конструктора этого базового класса, расположенные в промежуточных базовых классах, игнорируются.
Прокрутка стека (stack unwinding). Процесс выхода из функции при передаче исключения и перехода к поиску его обработчика. Локальные объекты, созданные перед передачей исключения, удаляются перед началом поиска соответствующего обработчика.
Пространство имен (namespace). Механизм, используемый для сбора всех имен, определенных в библиотеке или другом фрагменте программы, в единую область видимости. В отличие от других областей видимости языка С++, область видимости пространства имен может быть определена в нескольких частях. Пространство имен может быть открыто, закрыто и открыто вновь, причем в разных частях программы.
Псевдоним пространства имен (namespace alias). Синтаксис создания синонима для пространства имен имеет следующий вид: namespace N1 = N; где N1 — это лишь другое имя пространства имен N. Пространство имен может иметь несколько псевдонимов, причем псевдонимы и реальное имя пространства имен могут использоваться попеременно.
Спецификация noexcept. Ключевое слово, обычно указывающее, передает ли функция исключение. Когда за списком параметров функции следует ключевое слово noexcept, за ним (необязательно) может следовать заключенное в скобки константное выражение, приводимое к типу bool. Если выражение отсутствует или возвращает значение true, функция не передает исключений. Если выражение возвращает значение false или у функции нет спецификации исключения, она может передать любое исключение.