std:: domain_error
|
Определено в заголовке
<stdexcept>
|
||
|
class
domain_error
;
|
||
Определяет тип объекта, который будет выброшен как исключение. Может использоваться реализацией для сообщения об ошибках домена, то есть ситуациях, когда входные данные находятся вне домена, на котором определена операция.
Компоненты стандартной библиотеки не выбрасывают это исключение (математические функции сообщают об ошибках домена, как указано в
math_errhandling
). Однако сторонние библиотеки используют его. Например,
boost.math
выбрасывает
std::domain_error
если
boost::math::policies::throw_on_error
включен (настройка по умолчанию).
Все функции-члены
std::domain_error
являются
constexpr
: возможно создавать и использовать объекты
std::domain_error
при вычислении константного выражения.
Однако объекты
|
(since C++26) |
Диаграмма наследования
Содержание |
Функции-члены
|
(constructor)
|
создает новый объект
domain_error
с заданным сообщением
(public member function) |
|
operator=
|
заменяет объект
domain_error
(public member function) |
std::domain_error:: domain_error
|
domain_error
(
const
std::
string
&
what_arg
)
;
|
(1) | (constexpr since C++26) |
|
domain_error
(
const
char
*
what_arg
)
;
|
(2) | (constexpr since C++26) |
|
domain_error
(
const
domain_error
&
other
)
;
|
(3) |
(noexcept since C++11)
(constexpr since C++26) |
std::domain_error
, то
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
. Конструктор копирования не может генерировать исключения.
Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключения
Примечания
Поскольку копирование
std::domain_error
не разрешено генерировать исключения, это сообщение обычно хранится внутри как отдельно выделенная строка с подсчетом ссылок. Это также объясняет, почему нет конструктора, принимающего
std::string&&
: в любом случае пришлось бы копировать содержимое.
До решения LWG issue 254 , не копирующий конструктор мог принимать только std::string . Это делало динамическое выделение памяти обязательным для создания объекта std::string .
После решения
LWG issue 471
, производный класс стандартного исключения должен иметь публично доступный конструктор копирования. Он может быть неявно определен, если поясняющие строки, полученные с помощью
what()
, одинаковы для исходного объекта и скопированного объекта.
std::domain_error:: operator=
|
domain_error
&
operator
=
(
const
domain_error
&
other
)
;
|
(noexcept since C++11)
(constexpr since C++26) |
|
Присваивает содержимое из объекта
other
. Если
*
this
и
other
оба имеют динамический тип
std::domain_error
, то
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
после присваивания. Оператор копирующего присваивания не может генерировать исключения.
Параметры
| other | - | другой объект исключения для присваивания |
Возвращаемое значение
* this
Примечания
После решения
LWG issue 471
, производный класс стандартного исключения должен иметь публично доступный оператор копирующего присваивания. Он может быть неявно определен, пока пояснительные строки, полученные с помощью
what()
, одинаковы для исходного объекта и скопированного объекта.
Унаследовано от std:: logic_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 | the constructor accepting const char * was missing | added |
| LWG 471 | C++98 |
the explanatory strings of
std::domain_error
's
copies were implementation-defined |
they are the same as that of the
original
std::domain_error
object
|