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

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

В языке программирования C++ существует не только тип exception, но и ряд производных типов исключений. Использоваться они могут в разных ситуациях. Рассмотрим эти типы подробнее: runtime_error: это общий тип исключений, возникающих в процессе выполнения; • range_error: это исключение возникает, если полученный результат превосходит определенный допустимый диапазон; • overflow_error: когда полученный результат превышает допустимый диапазон; • underflow_error: когда полученный по итогу вычислений результат имеет недопустимые отрицательные значения; • logic_error: возникает в случае появления логических ошибок в программном коде; • domain_error: возникает, когда для какого-нибудь значения, которое передается в функцию, результат не определен; • invalid_argument: возникает в процессе передаче некорректного аргумента в функцию; • length_error: появляется в случае попытки создать объект большего размера, чем это допустимо для данного типа; • out_of_range: появляется при попытке доступа к элементам, которые отсутствуют в допустимом диапазоне.

1-1801-200088.png

Основная часть этих типов определена в stdexcept (заголовочном файле), за исключением класса bad_alloc, определяемом в new-файле, и класса bad_cast, определяемом в файле type_info.

Однако в отличие от классов exception, bad_cast и bad_alloc, в конструкторы прочих типов вы можете передать строку, передав таким образом сообщение об ошибке.

Что касается конструкции try...catch, то тут можно применять несколько блоков catch в целях обработки разных типов исключений. А в случае появления исключения для его обработки выберется как раз тот, который использует тип возникшего исключения.

Когда применяется несколько блоков catch, сначала помещают блоки catch, обрабатывающие более частные исключения, и лишь потом те блоки catch, которые имеют более общие типы исключений:

2-1801-ca2553.png

В нашем примере функция divide выбрасывает исключение типа runtime_error, когда параметр b равен 0. Инициализация такого исключения происходит с помощью сообщения об ошибке "Division by zero!".

Идем дальше: в функции main конструкция try..catch задействует 3 блока catch, при этом последний блок представляет, по сути, наиболее общий тип исключений exception. Второй блок выполняет обработку исключений типа runtime_error (производное от exception), а первый — обработку исключений типа overflow_error (производное от runtime_error).

Кроме того, все типы исключений имеют метод what(), возвращающий информацию об ошибке. В результате программа выдаст следующее:

3-1801-bcb547.png

По материалам https://metanit.com/cpp/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто