На этом шаге мы рассмотрим правила обработки исключений языковой поддержки.
Исключения языковой поддержки используются на уровне языка C++, поэтому их правильнее было бы отнести к базовому языку, нежели к библиотеке. Этн исключения генерируются при неудачных попытках выполнения некоторых операций.
class E1 class E2 void f() throw(E1) { . . . throw E1(); . . . throw E2(); }
Исключение типа Е2 нарушает спецификацию исключений функции f(). В этом случае будет вызвана функция unexpected(), которая обычно передает управление функции terminate() для завершения программы. Но при включении в спецификацию исключений класса bad_exceptton функция unexpected() обычно перезапускает исключение этого типа:
class E1 class E2 void f() throw(E1, std::bad_exception) // Генерирует исключения типа E1 или // bad_exception для всех остальных типов исключений { . . . . throw E1(); // Генерирует исключение типа Е1 . . . . throw E2(); // Вызывает функцию unexpected(), // которая генерирует bad_exception }
Итак, если спецификация исключений содержит класс bad_exception, то функция unexpected() может заменить исключением bad_exceptlon любое исключение, не входящее в спецификацию.
На следующем шаге мы рассмотрим классы исключений стандартной библиотеки.