Namespaces
Variants

std:: domain_error

From cppreference.net
Определено в заголовке <stdexcept>
class domain_error ;

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

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

Все функции-члены std::domain_error являются constexpr : возможно создавать и использовать объекты std::domain_error при вычислении константного выражения.

Однако объекты std::domain_error обычно не могут быть constexpr , поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.

(since C++26)
cpp/error/exception cpp/error/logic error std-domain error-inheritance.svg

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

Содержание

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

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

Параметры

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

Исключения

1,2) Может генерировать std::bad_alloc .

Примечания

Поскольку копирование 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

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

уничтожает объект исключения
(виртуальная публичная функция-член 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