std::range_error
Определено в заголовке <stdexcept> | ||
|---|---|---|
class range_error; |
Определяет тип объекта, который необходимо бросить в качестве исключения. Он может использоваться для сообщения об ошибках диапазона (то есть ситуациях, когда результат вычисления не может быть представлен типом назначения).
Единственными компонентами стандартной библиотеки, которые бросают это исключение, являются std::wstring_convert::from_bytes и std::wstring_convert::to_bytes.
Математические функции в компонентах стандартной библиотеки не бросают это исключение (математические функции сообщают об ошибках диапазона в соответствии с math_errhandling).
Диаграмма наследования
Члены-функции
| (конструктор) | создаёт новый объект 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) |
what_arg в качестве строки пояснения. После создания std::strcmp(what(), what_arg.c_str()) == 0.what_arg в качестве строки пояснения. После создания std::strcmp(what(), what_arg) == 0.*this и other оба имеют динамический тип std::range_error , то std::strcmp(what(), other.what()) == 0. Исключение брошено не может быть от конструктора копирования.(до C++11)
Параметры
| what_arg | - | строка пояснения |
| other | - | другой объект исключения для копирования |
Исключения
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) |
|
[виртуальный] | возвращает строку пояснения (виртуальная публичная функция-член 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