Обработка исключений в C++: try, catch, throw

Обработка исключений в C++ (try, catch, throw) ловит ошибки времени выполнения, не давая программе аварийно завершиться.

Исключение — это сигнал об ошибке, который выбрасывают через throw и перехватывают в блоке catch. Так ошибку можно обработать, а не уронить программу.

throw, try и catch

Опасный код помещают в try; throw выбрасывает исключение; catch его перехватывает. Метод what() возвращает текст ошибки.

#include <iostream>
#include <stdexcept>
using namespace std;

double divide(int a, int b) {
    if (b == 0) throw runtime_error("деление на ноль");
    return (double)a / b;
}

int main() {
    try {
        cout << divide(10, 2) << "\n";
        cout << divide(10, 0) << "\n";   // здесь вылетит исключение
        cout << "эта строка не выполнится\n";
    } catch (const runtime_error& e) {
        cout << "Ошибка: " << e.what() << "\n";
    }
    cout << "Программа продолжает работу\n";
    return 0;
}

Вывод:

5
Ошибка: деление на ноль
Программа продолжает работу

Коротко

  • throw выбрасывает исключение, catch его перехватывает.
  • Опасный код оборачивают в try; после исключения остаток try пропускается.
  • e.what() возвращает текст ошибки; программа продолжает работу после catch.
Проверьте себя
1. Каким оператором выбрасывают исключение?
Araise
Bthrow
Cexcept
Dpanic
2. Что произойдёт с кодом в try после строки, выбросившей исключение?
AВыполнится как обычно
BБудет пропущен — управление уйдёт в catch
CВыполнится дважды
DВызовет ошибку компиляции
3. Что возвращает метод what() у исключения?
AКод ошибки числом
BТекст описания ошибки
CИмя файла
DНомер строки
Поддержать проект