std:: range_error
|
Определено в заголовочном файле
<stdexcept>
|
||
|
class
range_error
;
|
||
Определяет тип объекта, который будет выброшен как исключение. Может использоваться для сообщения об ошибках диапазона (то есть ситуаций, когда результат вычисления не может быть представлен целевым типом).
Единственные компоненты стандартной библиотеки, которые выбрасывают это исключение, это std::wstring_convert::from_bytes и std::wstring_convert::to_bytes .
Математические функции в компонентах стандартной библиотеки не вызывают это исключение (математические функции сообщают об ошибках диапазона, как указано в math_errhandling ).
Все функции-члены
std::range_error
являются
constexpr
: возможно создавать и использовать объекты
std::range_error
при вычислении константного выражения.
Однако, объекты
|
(since C++26) |
Диаграмма наследования
Содержание |
Функции-члены
|
(constructor)
|
создает новый объект
range_error
с заданным сообщением
(public member function) |
|
operator=
|
заменяет объект
range_error
(public member function) |
std::range_error:: range_error
|
range_error
(
const
std::
string
&
what_arg
)
;
|
(1) | (constexpr since C++26) |
|
range_error
(
const
char
*
what_arg
)
;
|
(2) | (constexpr since C++26) |
|
range_error
(
const
range_error
&
other
)
;
|
(3) |
(noexcept since C++11)
(constexpr since C++26) |
std::range_error
, то
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
. Из конструктора копирования не могут быть выброшены исключения.
Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключения
Примечания
Поскольку копирование
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
)
;
|
(noexcept начиная с C++11)
(constexpr начиная с C++26) |
|
Присваивает содержимое из объекта
other
. Если
*
this
и
other
оба имеют динамический тип
std::range_error
, то
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
после присваивания. Оператор копирующего присваивания не может генерировать исключения.
Параметры
| other | - | другой объект исключения для присваивания |
Возвращаемое значение
* this
Примечания
После решения
LWG issue 471
, производный класс стандартного исключения должен иметь общедоступный оператор копирующего присваивания. Он может быть неявно определен, пока пояснительные строки, полученные через
what()
, одинаковы для исходного объекта и скопированного объекта.
Унаследовано от std:: runtime_error
Унаследовано от std:: exception
Функции-члены
|
[virtual]
|
уничтожает объект исключения
(виртуальная публичная функция-член
std::exception
)
|
|
[virtual]
|
возвращает поясняющую строку
(виртуальная публичная функция-член
std::exception
)
|
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_constexpr_exceptions
|
202502L
|
(C++26) | constexpr типы исключений |
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 254 | C++98 | конструктор, принимающий const char * отсутствовал | добавлен |
| LWG 471 | C++98 |
пояснительные строки копий
std::range_error
были определяемыми реализацией |
они совпадают с таковыми у исходного
объекта
std::range_error
|