Глава 22. Обработка исключительных ситуаций_______________________607

список обработчиков в объемлющей области видимости. Если поиск обработчика вплоть до самого верхнего уровня (main о) не даст результата, система аварийно завершит программу. Используя функцию set_teminate (), описанную далее в этой главе в разделе "Задание собственного обработчика завершения", можно изменить это положение.

Для иллюстрации некоторых из этих правил ниже приведено несколько примеров. На листинге 22.16 показана программа с вложенными блоками try. Постарайтесь предсказать результат ее выполнения.

h06011.jpg

// Необходимые заголовки 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 (). В этом списке обработчик строковых исключительных ситуаций действительно есть, ему эта ситуация и направляется.