Глава 22. Обработка исключительных ситуаций_______________________607
список обработчиков в объемлющей области видимости. Если поиск обработчика вплоть до самого верхнего уровня (main о) не даст результата, система аварийно завершит программу. Используя функцию set_teminate (), описанную далее в этой главе в разделе "Задание собственного обработчика завершения", можно изменить это положение.
Для иллюстрации некоторых из этих правил ниже приведено несколько примеров. На листинге 22.16 показана программа с вложенными блоками try. Постарайтесь предсказать результат ее выполнения.
// Необходимые заголовки ttinclude <iostream;h>
void Fund(int flag) {
try {
cout « "B Funcl.\n";
if (flag)
throw "Строковая исключительная ситуация";
} catch (int) (
cout « "Перехвачена целочисленная исключительная ситуация.\п";
} }
void main() (
try {
Funcl(l) ;
} catch (char *str) {
cout « " Перехвачена строковая исключительная ситуация: " Ь« str « "\n";
}
catch (...) {
cout « " Перехвачена неопознанная исключительная ситуация.\n";
}
}
Передача ненулевого значения аргументу flag функции Funcio заставляет программу генерировать строковую исключительную ситуацию. Однако в блоке try функции Funcio нет обработчика для строковых исключительных ситуаций, поэтому ядро во время выполнения программы переходит на внешний уровень области видимости и ищет список обработчиков в main (). В этом списке обработчик строковых исключительных ситуаций действительно есть, ему эта ситуация и направляется.