Надёжность · Ошибки, файлы, тесты

Обработка ошибок

Исключения и std::expected: когда что

~35 мин 7 шагов

После урока ты сможешь

  • Бросать и ловить исключения стандартных типов
  • Возвращать ошибки через std::expected
  • Выбирать стратегию обработки ошибок осознанно

Шаг 1 из 7

Ошибки бывают разные

Программа, которая работает только на правильных данных, — это демонстрация, а не программа. В реальности файл не найдётся, пользователь введёт буквы вместо числа, сервер не ответит. Вопрос не в том, случатся ли ошибки, а в том, как программа о них сообщает.

В C++ есть три основных способа:

  1. std::optional — «результата нет», без объяснения причин (уже знаешь).
  2. std::expected (C++23) — «вот результат, а если не получилось, вот описание ошибки». Ошибка — обычное значение, которое возвращают и проверяют.
  3. Исключения — «случилось что-то, с чем здесь справиться нельзя». Ошибка «вылетает» из функции и летит вверх по стеку вызовов, пока её не поймают.