Namespaces
Variants

std:: runtime_error

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

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

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

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

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

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

Исключения типа std::runtime_error выбрасываются следующими компонентами стандартной библиотеки:

(начиная с C++20)

Кроме того, следующие стандартные типы исключений являются производными от std::runtime_error :

**Примечание:** В данном случае весь текст, подлежащий переводу, состоит из стандартных C++ терминов (`std::range_error`, `std::overflow_error`, `std::underflow_error`), которые согласно инструкциям не должны переводиться. HTML-разметка и атрибуты также сохранены без изменений.
(начиная с C++11)
(начиная с C++17)
(начиная с C++20)

Содержание

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

(конструктор)
создает новый объект runtime_error с заданным сообщением
(public member function)
operator=
заменяет объект runtime_error
(public member function)

std::runtime_error:: runtime_error

runtime_error ( const std:: string & what_arg ) ;
(1) (constexpr since C++26)
runtime_error ( const char * what_arg ) ;
(2) (constexpr since C++26)
runtime_error ( const runtime_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::runtime_error , то std:: strcmp ( what ( ) , other. what ( ) ) == 0 . Из конструктора копирования не может быть выброшено исключение.

Параметры

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

Исключения

1,2) Может выбрасывать std::bad_alloc .

Примечания

Поскольку копирование std::runtime_error не разрешено выбрасывать исключения, это сообщение обычно хранится внутри как отдельно выделенная строка с подсчетом ссылок. Это также объясняет, почему нет конструктора, принимающего std::string&& : в любом случае пришлось бы копировать содержимое.

До решения LWG issue 254 , не копирующий конструктор мог принимать только std::string . Это делало динамическое выделение памяти обязательным для создания объекта std::string .

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

std::runtime_error:: operator=

runtime_error & operator = ( const runtime_error & other ) ;
(noexcept since C++11)
(constexpr since C++26)

Присваивает содержимое из объекта other . Если * this и other оба имеют динамический тип std::runtime_error , то std:: strcmp ( what ( ) , other. what ( ) ) == 0 после присваивания. Оператор копирующего присваивания не может генерировать исключения.

Параметры

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

Возвращаемое значение

* this

Примечания

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

Унаследовано от 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::runtime_error 's
copies were implementation-defined
they are the same as that of the
original std::runtime_error object