Spec-Zone.ru › C++

std::range_error

Определено в заголовке <stdexcept>
class range_error;

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

Единственными компонентами стандартной библиотеки, которые бросают это исключение, являются std::wstring_convert::from_bytes и std::wstring_convert::to_bytes.

Математические функции в компонентах стандартной библиотеки не бросают это исключение (математические функции сообщают об ошибках диапазона в соответствии с math_errhandling).

cpp/error/exception cpp/error/runtime errorstd-range error-inheritance.svg

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

Члены-функции

(конструктор)
создаёт новый объект range_error с заданным сообщением
(публичная функция-член)
operator=
заменяет объект range_error
(публичная функция-член)

std::range_error::range_error

range_error( const std::string& what_arg );
(1)
range_error( const char* what_arg );
(2)
(3)
range_error( const range_error& other );
(до C++11)
range_error( const range_error& other ) 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::range_error , то std::strcmp(what(), other.what()) == 0. Исключение брошено не может быть от конструктора копирования.(до C++11)

Параметры

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

Исключения

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

Примечания

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

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

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

std::range_error::operator=

range_error& operator=( const range_error& other );
(до C++11)
range_error& operator=( const range_error& other ) noexcept;
(с C++11)

Присваивает содержимое объекта other. Если *this и other оба имеют динамический тип std::range_error , то std::strcmp(what(), other.what()) == 0 после присвоения. Исключение не может быть брошено оператором копирования присваивания.(до C++11)

Параметры

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

Значение возврата

*this

Примечания

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

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

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

Члены-функции

(деструктор)
[виртуальный]
уничтожает объект исключения
(виртуальная публичная функция-член std::exception)
what
[виртуальный]
возвращает строку пояснения
(виртуальная публичная функция-член std::exception)

Отчеты об ошибках

Следующие отчеты об ошибках, меняющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение, как опубликовано Корректное поведение
LWG 254 C++98 конструктор, принимающий const char* , отсутствовал добавлено
LWG 471 C++98 строки пояснения копий std::range_error были определены реализацией они идентичны строке пояснения
исходного объекта std::range_error

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/error/range_error

Spec-Zone.ru

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