Перенаправление исключительных ситуаций
Иногда возникает положение, при котором необходимо обработать исключительную ситуацию сначала на более низком уровне вложенности блока try, а затем передать ее на более высокий уровень для продолжения обработки. Для того чтобы сделать это, нужно использовать throw без аргументов. В этом случае исключительная ситуация будет перенаправлена к следующему подходящему обработчику (подходящий обработчик не ищется ниже в текущем списке − сразу осуществляется поиск на более высоком уровне). Приводимый ниже
пример демонстрирует организацию такой передачи. Программа содержит вложенный блок try и соответствующий блок catch. Сначала происходит первичная обработка, затем исключительная ситуация перенаправляется на более высокий уровень для дальнейшей обработки.
#include<iostream>
using namespace std;
void func(int i)
{ try{
if(i) throw "Error";
}
catch(char *s) {
cout<<s<<"- выполняется первый обработчик"<<endl;
throw;
}
}
int main()
{ try{
func(1);
}
catch(char *s) {
cout<<s<<"- выполняется второй обработчик"<<endl;
}
}
Результат выполнения программы:
Error - выполняется первый обработчик
Error - выполняется второй обработчик
Если ключевое слово trow используется вне блока catch, то автоматически
будет вызвана функция terminate(), которая по умолчанию завершает программу.
Дата добавления: 2015-12-21; просмотров: 193; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!