Spec-Zone.ru › C++

std::underflow_error

Определено в заголовочном файле <stdexcept>
class underflow_error;

Определяет тип объекта, который можно выбрасывать как исключение. Его можно использовать для сообщения об ошибках арифметического антипереполнения (то есть ситуациях, когда результат вычисления является субнормальным значением с плавающей точкой).

Компоненты стандартной библиотеки не выбрасывают это исключение (математические функции сообщают об ошибках антипереполнения согласно math_errhandling). Однако это исключение используется сторонними библиотеками. Например, boost.math выбрасывает std::underflow_error, если включён boost::math::policies::throw_on_error (настройка по умолчанию).

cpp/error/exception cpp/error/runtime error

Диаграмма наследования

Функции-члены

(constructor)
создаёт новый объект 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)
underflow_error( const underflow_error& other );
(3) (noexcept начиная с C++11)
1) Создаёт объект исключения, используя what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg.c_str()) == 0.
2) Создаёт объект исключения, используя what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg) == 0.
3) Конструктор копирования. Если *this и other имеют динамический тип std::underflow_error, то std::strcmp(what(), other.what()) == 0. Конструктор копирования не может выбрасывать исключения.

Параметры

what_arg - поясняющая строка
other - другой объект исключения для копирования

Исключения

1,2) Может выбросить std::bad_alloc.

Примечания

Поскольку копирование std::underflow_error не должно приводить к выбрасыванию исключений, это сообщение обычно хранится внутри в виде отдельно выделенной строки со счётчиком ссылок. По этой же причине отсутствует конструктор, принимающий std::string&&: содержимое в любом случае пришлось бы копировать.

До принятия решения по вопросу LWG 254 конструктор, отличный от конструктора копирования, мог принимать только std::string. Для создания объекта std::string требовалось обязательное динамическое выделение памяти.

После принятия решения по вопросу LWG 471 производный класс стандартного исключения должен иметь общедоступный конструктор копирования. Его можно определить неявно, если поясняющие строки, полученные с помощью what(), совпадают у исходного объекта и его копии.

std::underflow_error::operator=

underflow_error& operator=( const underflow_error& other );
(noexcept начиная с C++11)

Присваивает содержимое объекта, используя содержимое other. Если *this и other имеют динамический тип std::underflow_error, то после присваивания std::strcmp(what(), other.what()) == 0. Оператор присваивания копированием не может выбрасывать исключения.

Параметры

other - другой объект исключения для присваивания

Возвращаемое значение

*this

Примечания

После принятия решения по вопросу LWG 471 производный класс стандартного исключения должен иметь общедоступный оператор присваивания копированием. Его можно определить неявно, если поясняющие строки, полученные с помощью what(), совпадают у исходного объекта и его копии.

Унаследовано от std::runtime_error

Унаследовано от std::exception

Функции-члены

(destructor)
[виртуальная]
уничтожает объект исключения
(виртуальная открытая функция-член std::exception)
what
[виртуальная]
возвращает поясняющую строку
(виртуальная открытая функция-член 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/cpp/error/underflow_error

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API