Ветка catch
Ветка catch используется вместе с блоком try
для обработки исключений. Когда в блоке try
возникает исключение, управление передаётся в соответствующий
блок catch. В параметр ветки catch
мы передаём тип исключения, которое хотим перехватить,
а внутри фигурных скобок размещаем код обработки.
Можно указать имя переменной, чтобы получить доступ
к объекту исключения.
Синтаксис
try
{
// код, который может выбросить исключение
}
catch (тип_исключения имя_переменной)
{
// код обработки исключения
}
Пример
Давайте перехватим исключение типа int
и выведем его значение:
#include <iostream>
using namespace std;
int main()
{
try
{
throw 123;
}
catch (int err)
{
cout << "Caught: " << err << endl;
}
return 0;
}
Результат выполнения кода:
"Caught: 123"
Пример
Давайте перехватим исключение типа const char*
и выведем сообщение об ошибке:
#include <iostream>
using namespace std;
int main()
{
try
{
throw "something went wrong";
}
catch (const char* err)
{
cout << "Error: " << err << endl;
}
return 0;
}
Результат выполнения кода:
"Error: something went wrong"
Пример
Давайте используем несколько веток catch
для обработки разных типов исключений:
#include <iostream>
using namespace std;
int main()
{
try
{
throw 5.5;
}
catch (int err)
{
cout << "Int: " << err << endl;
}
catch (double err)
{
cout << "Double: " << err << endl;
}
return 0;
}
Результат выполнения кода:
"Double: 5.5"
Пример
Давайте перехватим исключение стандартного типа
std::runtime_error и вызовем его метод what:
#include <iostream>
#include <stdexcept>
using namespace std;
int main()
{
try
{
throw runtime_error("bad thing");
}
catch (const runtime_error& err)
{
cout << "Caught: " << err.what() << endl;
}
return 0;
}
Результат выполнения кода:
"Caught: bad thing"