Оператор catch (...)
Оператор catch (...) используется в конструкции
try-catch для перехвата исключений любого типа.
В отличие от обычного catch, где указывается
конкретный тип исключения, многоточие '...'
позволяет поймать абсолютно любое исключение. Такой
обработчик часто называют "catch-all" (перехватить всё).
Он не принимает параметров, поэтому внутри блока нельзя
получить информацию о пойманном исключении. Обычно
catch (...) ставят последним в цепочке
обработчиков, чтобы он поймал те исключения, которые
не были обработаны ранее.
Синтаксис
try {
// code that may throw
} catch (...) {
// handle any exception
}
Пример
Давайте сгенерируем исключение типа int и
перехватим его с помощью catch (...):
#include <iostream>
using namespace std;
int main()
{
try {
throw 123;
} catch (...) {
cout << "Caught an exception" << endl;
}
return 0;
}
Результат выполнения кода:
"Caught an exception"
Пример
Давайте сгенерируем исключение типа const char*
и перехватим его универсальным обработчиком:
#include <iostream>
using namespace std;
int main()
{
try {
throw "some error";
} catch (...) {
cout << "Caught unknown error" << endl;
}
return 0;
}
Результат выполнения кода:
"Caught unknown error"
Пример
Давайте покажем, как catch (...) работает в
связке с обычным catch. Сначала обрабатывается
конкретный тип, а затем все остальные:
#include <iostream>
using namespace std;
int main()
{
try {
throw 123;
} catch (const char* msg) {
cout << "String: " << msg << endl;
} catch (...) {
cout << "Fallback handler" << endl;
}
return 0;
}
Результат выполнения кода:
"Fallback handler"