Программирование на C и C++

Онлайн справочник программиста на C и C++

Использование нескольких инструкций catch

Как отмечалось ранее, с одним блоком try может быть ассоциировано несколько инст­рукций catch. Более того, такая практика является обычной. Однако различные инструкции catch должны перехватывать различные типы исключений. В качестве примера рассмотрим следующую программу, перехватывающую исключения целого типа и исключения строкового типа:

#include <iostream.h>
// можно перехватывать различные типы исключений
void Xhandler(int test)
{
try {
if (test) throw test;
else throw "Value is zero";
}
catch (int i) {
cout << "Caught Exception #: " << i << '\n';
}
catch(char *str) {
cout << "Caught a string: ";
cout << str << '\n';
}
}
int main()
{
cout << "Start\n";
Xhandler(1);
Xhandler(2);
Xhandler(0);
Xhandler(3);
cout << "End";
return 0;
}

Эта программа выдаст следующий результат на экран:

Start
Caught Exception #: 1
Caught Exception #: 2
Caught a strung: Value is zero
Caught Exception #: 3
End

Как можно видеть, каждая инструкция catch отвечает только на свой тип исключений.

В общем случае инструкции catch проверяются на соответствие типа в том порядке, в котором они расположены в программе. Выполняется только та инструкция catch, чей тип соответствует типу исключения. Все остальные блоки catch игнорируются.