Namespaces
Variants

std:: range_error

From cppreference.net
Определено в заголовочном файле <stdexcept>
class range_error ;

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

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

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

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

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

(since C++26)
cpp/error/exception cpp/error/runtime error std-range error-inheritance.svg

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

Содержание

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

(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)
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 . Из конструктора копирования не могут быть выброшены исключения.

Параметры

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 ) ;
(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

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

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