<<
>>

Связывание исключений с обработчиками

Само исключение в языке С++ возникает по оператору throw [ ]

532

Глава 17.
Аппарат исключений

Тип выражения должен совпадать с типом формального параметра какого-то обработчика исключений. Квадратные скобки являются метасимволами, указывающими на необязательность выражения. Оператор throw без операнда может появиться только в обработчике. При этом он повторно возбуждает исключение, которое затем обрабатывается где-нибудь в другом месте. Это полностью повторяет использование оператора raise в Ada без указания имени исключения.

По типу выражения throw выбирается конкретный обработчик, имеющий соответствующий тип формального параметра. Более точно: обработчик с формальным параметром типа Т, const T, T & (ссылка на объект типа Т) или const T & соответствует оператору throw с выражением, имеющим тип Т.

Если же тип Т обозначает класс, то «соответствующим» считают обработчик, параметр которого имеет тип Т, или любой класс, являющийся предком класса Т.

При возникновении исключения вычисления в блоке try прекращаются. Происходит поиск подходящего обработчика. Поиск начинается с обработчика, который непосредственно примыкает к блоку try. Если совпадения нет, исключение распространяется на объемлющий блок (из которого вызывалась функция, где появилось исключение). Последний обработчик часто записывается с формальным параметром «многоточие» (. . .), который соответствует любому исключению. Это гарантирует, что все исключения будут обработаны.

После нормального завершения работы обработчика управление передается первому оператору следующего блока try.

Если в программе не найден подходящий обработчик, тогда вызывается стандартный обработчик unexpected, который просто останавливает программу. Он может быть замещен пользовательским обработчиком, функцией с заголовком void set_terminate( ).

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

<< | >>

Еще по теме Связывание исключений с обработчиками:

  1. Позитивное связывание
  2. Ограничение свободы движений (связывание, стягивание)
  3. Ограничение свободы движений (связывание, стягивание)
  4. Исключения
  5. какиe виды тайны влекут исключения из числа свидетелей.
  6. Статья 128. Исключение из состава участников полного общества
  7. ИСКЛЮЧЕНИЯ ПРИ АНАЛИЗЕ ГОЛОСОВОГО КОДА
  8. ИСКЛЮЧЕНИЯ ПРИ АНАЛИЗЕ ГОЛОСОВОГО КОДА
  9. Статья 130. Расчеты в случае выхода, исключение и убытие с полного общества
  10. § 2. Требования об освобождении имущества от ареста и исключении имущества из описи (п. 2509-2515)
  11. коян: Восходящий узел - включение в общий поток; Нисходящий узел - исключение из общего потока.
  12. § 13 Личные отношения супругов по русскому закону. – Приобщение жены к состоянию мужа. – Совместное жительство супругов. – Право мужа требовать к себе жену. – Исключение для жены осужденного, сосланного и высланного. – Право мужа следовать за женой. – Нравственная и попечительная обязанность мужа. – Право жены на содержание. – Обязанность жены повиноваться мужу.
  13. ФУНКЦИЯ ПСИХИЧЕСКАЯ: ЛОКАЛИЗАЦИЯ
  14. Статья 125. Изменения в составе участников полного общества