std::underflow_error
Определено в заголовке <stdexcept> | ||
|---|---|---|
class underflow_error; |
Определяет тип объекта, который должен быть брошен как исключение. Он может использоваться для сообщения об ошибках арифметического понижения (то есть, ситуациях, когда результат вычисления является поднормальным значением с плавающей точкой).
Компоненты стандартной библиотеки не выбрасывают это исключение (математические функции сообщают об ошибках понижения, как указано в math_errhandling). Однако сторонние библиотеки используют это. Например, boost.math выбрасывает std::underflow_error если boost::math::policies::throw_on_error включено (по умолчанию).
Диаграмма наследования
Члены-функции
| (конструктор) | создаёт новый объект underflow_error с заданным сообщением (публичная функция-член) |
| operator= | заменяет объект underflow_error (публичная функция-член) |
std::underflow_error::underflow_error
underflow_error( const std::string& what_arg ); | (1) | |
underflow_error( const char* what_arg ); | (2) | |
| (3) | ||
underflow_error( const underflow_error& other ); | (до C++11) | |
underflow_error( const underflow_error& other ) noexcept; | (с C++11) |
what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg.c_str()) == 0. what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg) == 0. *this и other оба имеют динамический тип std::underflow_error, то std::strcmp(what(), other.what()) == 0. Из конструктора копирования не может быть брошено исключение.(до C++11)
Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключения
std::bad_alloc.Примечания
Поскольку копирование std::underflow_error не допускается для выбрасывания исключений, это сообщение обычно хранится внутри как отдельная строка с отсчётом ссылок. Именно поэтому нет конструктора, принимающего std::string&&: ему всё равно пришлось бы скопировать содержимое.
До решения LWG issue 254, некопирующий конструктор может принимать только std::string. Это делает динамическое выделение обязательным для создания объекта std::string.
После решения LWG issue 471, производный класс стандартного исключения должен иметь публичный конструктор копирования. Он может быть неявно определён, если поясняющие строки, полученные what(), совпадают для исходного объекта и скопированного объекта.
std::underflow_error::operator=
underflow_error& operator=( const underflow_error& other ); | (до C++11) | |
underflow_error& operator=( const underflow_error& other ) noexcept; | (с C++11) |
Присваивает содержимое объекта other. Если *this и other оба имеют динамический тип std::underflow_error, то std::strcmp(what(), other.what()) == 0 после присваивания. Из оператора присваивания копирования не может быть брошено исключение.(до C++11)
Параметры
| other | - | другой объект исключения для присваивания |
Возвращаемое значение
*this
Примечания
После решения LWG issue 471, производный класс стандартного исключения должен иметь публичный оператор присваивания копирования. Он может быть неявно определён, если поясняющие строки, полученные what(), совпадают для исходного объекта и скопированного объекта.
Унаследовано от std::runtime_error
Унаследовано от std::exception
Члены-функции
|
[виртуальный] | уничтожает объект исключения (виртуальная публичная функция-член std::exception) |
|
[виртуальный] | возвращает поясняющую строку (виртуальная публичная функция-член std::exception) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение, опубликованное | Правильное поведение |
|---|---|---|---|
| LWG 254 | C++98 | конструктор, принимающий const char* отсутствовал | добавлен |
| LWG 471 | C++98 | поясняющие строки копий std::underflow_error были реализационно-зависимыми | они такие же, как у исходного объекта std::underflow_error |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/error/underflow_error