Кратко:

Механизм исключений в 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++ обеспечивает гибкую обработку ошибок и позволяет программистам создавать более надежные и структурированные программы, способные адекватно реагировать на неожиданные ситуации во время выполнения.