Оператор throw
Оператор throw генерирует исключение и передаёт управление
ближайшему подходящему обработчику catch. В качестве
операнда оператор принимает выражение любого типа: это может
быть число, строка, объект класса или стандартное исключение.
Если подходящий обработчик не найден, программа аварийно
завершается через вызов std::terminate.
Синтаксис
throw expression;
Пример
Давайте сгенерируем исключение с числовым значением
404 и перехватим его в блоке catch:
#include <iostream>
using namespace std;
int main()
{
try
{
throw 404;
}
catch (int err)
{
cout << "Error: " << err << endl;
}
return 0;
}
Результат выполнения кода:
"Error: 404"
Пример
Давайте сгенерируем исключение со строковым сообщением
"abcde" и перехватим его по константной ссылке:
#include <iostream>
#include <string>
using namespace std;
int main()
{
try
{
throw string("abcde");
}
catch (const string& err)
{
cout << "Caught: " << err << endl;
}
return 0;
}
Результат выполнения кода:
"Caught: abcde"
Пример
Давайте сгенерируем стандартное исключение
std::runtime_error с сообщением "bad thing":
#include <iostream>
#include <stdexcept>
using namespace std;
int main()
{
try
{
throw runtime_error("bad thing");
}
catch (const exception& err)
{
cout << err.what() << endl;
}
return 0;
}
Результат выполнения кода:
"bad thing"
Пример
Давайте сгенерируем исключение внутри функции и перехватим его в вызывающем коде:
#include <iostream>
using namespace std;
void check(int n)
{
if (n < 0)
{
throw n;
}
cout << "OK: " << n << endl;
}
int main()
{
try
{
check(-5);
}
catch (int err)
{
cout << "Negative: " << err << endl;
}
return 0;
}
Результат выполнения кода:
"Negative: -5"