Кратко:
Механизм исключений в C++ позволяет структурированно обрабатывать ошибки, разрывая обычный поток выполнения программы на блоки try
, throw
, и catch
.
-
try
: Блок кода, в котором может произойти исключение. Здесь указывается код, который нужно отслеживать на наличие ошибок. -
throw
: Оператор, который генерирует исключение. Он используется внутри блокаtry
для явного указания на возникновение ошибочной ситуации. -
catch
: Блок кода, который перехватывает и обрабатывает исключение, сгенерированное в блокеtry
. Здесь указывается тип исключения, которое нужно перехватывать, и код обработки ошибки.
Пример использования механизма исключений:
#include <iostream>
#include <stdexcept>
double division(int a, int b) {
if (b == 0) {
throw std::runtime_error("Division by zero");
}
return static_cast<double>(a) / b;
}
int main() {
try {
std::cout << "Enter two numbers for division: ";
int num1, num2;
std::cin >> num1 >> num2;
double result = division(num1, num2);
std::cout << "Result of division: " << result << std::endl;
} catch (const std::runtime_error& e) {
std::cerr << "Runtime error occurred: " << e.what() << std::endl;
} catch (...) {
std::cerr << "Unknown exception occurred" << std::endl;
}
return 0;
}
В этом примере:
- Функция
division
выбрасывает исключениеstd::runtime_error
, если второй аргумент равен нулю. - В блоке
try
вызывается функцияdivision
, и если она выбрасывает исключение, управление передается соответствующему блокуcatch
. - В блоке
catch (const std::runtime_error& e)
мы обрабатываем исключение типаstd::runtime_error
, выводим сообщение об ошибке. - Блок
catch (...)
является общим блоком перехвата всех остальных исключений, не относящихся кstd::runtime_error
.
Механизм исключений в C++ обеспечивает гибкую обработку ошибок и позволяет программистам создавать более надежные и структурированные программы, способные адекватно реагировать на неожиданные ситуации во время выполнения.