• В заголовке new
bad_alloc
, рассматриваемый в разделе 12.1.2.• В заголовке type_info
bad_cast
, рассматриваемый в разделе 19.2.В классах exception
bad_alloc
и bad_cast
определен только стандартный конструктор (см. раздел 2.2.1), поэтому невозможно инициализировать объект этих типов.Поведение исключений других типов прямо противоположно: их можно инициализировать объектом класса string
Таблица 5.1. Стандартные классы исключений, определенные в заголовке stdexcept
exception | Наиболее общий вид проблемы |
runtime_error | Проблема, которая может быть обнаружена только во время выполнения |
range_error | Ошибка времени выполнения: полученный результат превосходит допустимый диапазон значения |
overflow_error | Ошибка времени выполнения: переполнение регистра при вычислении |
underflow_error | Ошибка времени выполнения: недополнение регистра при вычислении |
logic_error | Ошибка в логике программы |
domain_error | Логическая ошибка: аргумент, для которого не существует результата |
invalid_argument | Логическая ошибка: неподходящий аргумент |
length_error | Логическая ошибка: попытка создать объект большего размера, чем максимально допустимый для данного типа |
out_of_range | Логическая ошибка: используемое значение вне допустимого диапазона |
В классах исключений определена только одна функция what()
char
. Это указатель на символьную строку в стиле С (см. раздел 3.5.4), содержащую текст описания переданного исключения.Содержимое символьного массива (строки в стиле С), указатель на который возвращает функция what()
string
, функция what()
возвращает строку. Что же касается других типов, то возвращаемое значение зависит от компилятора.Упражнение 5.23
. Напишите программу, которая читает два целых числа со стандартного устройства ввода и выводит результат деления первого числа на второе.Упражнение 5.24
. Перепишите предыдущую программу так, чтобы она передавала исключение, если второе число — нуль. Проверьте свою программу с нулевым вводом, чтобы увидеть происходящее при отсутствии обработчика исключения.Упражнение 5.25
. Перепишите предыдущую программу так, чтобы использовать для обработки исключения блокtry
. Раздел catch
должен отобразить сообщение и попросить пользователя ввести новое число и повторить код в блоке try
.Резюме
Язык С++ предоставляет довольно ограниченное количество операторов. Некоторые из них предназначены для управления потоком выполнения программы.
• Операторы while
for
и do while
позволяют реализовать итерационные циклы.• Операторы if
switch
позволяют реализовать условное выполнение.• Оператор continue
• Оператор break
switch
.• Оператор goto
• Операторы try
catch
позволяют создать блок try
, в который заключают операторы программы, потенциально способные передать исключение. Оператор catch
начинает раздел обработчика исключения, код которого предназначен для реакции на исключение определенного типа.• Оператор throw
catch
.• Оператор return
Кроме того, существуют операторы выражения и операторы объявления. Объявления и определения переменных были описаны в главе 2.
Термины