Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpPmExTp 361 of 390 menu
◀ ▶

Типы исключений в C++

У каждого исключения есть тип. В catch указывают именно тип, чтобы реагировать на конкретную проблему. В учебных задачах часто встречаются std::invalid_argument и std::runtime_error из заголовка stdexcept.

Исключение std::invalid_argument сигнализирует, что аргумент функции не подходит по смыслу. Его выбрасывает, например, std::stoi, если строку нельзя преобразовать в число:

int main() { std::string raw = "12x"; try { std::cout << std::stoi(raw) << "\n"; } catch (const std::invalid_argument& e) { std::cout << "invalid number\n"; } return 0; }

Исключение std::runtime_error описывает ошибку, которую нельзя проверить заранее или которую удобно сообщить явно через throw. Типичный учебный случай - запрет деления на ноль в своей функции:

int main() { int x = 10; int y = 0; try { if (y == 0) { throw std::runtime_error("zero divisor"); } std::cout << x / y << "\n"; } catch (const std::runtime_error& e) { std::cout << "bad division\n"; } return 0; }

Оба типа наследуют std::exception, поэтому их можно перехватить и через базовый catch (const std::exception& e) с выводом e.what(). В одном catch указывают один тип. Если нужны разные реакции, добавляют несколько блоков catch подряд.

Дана строка input. В try получите из нее целое через std::stoi. В catch для std::invalid_argument выведите "format".

Даны numerator и denominator. При нулевом делителе выбросьте std::runtime_error в try. В catch для std::runtime_error выведите "math".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить