std::runtime_error
Определён в заголовочном файле <stdexcept> | ||
|---|---|---|
class runtime_error; |
Определяет тип объекта, который может быть выброшен как исключение. Сообщает об ошибках, вызванных событиями, находящимися вне области контроля программы и не поддающимися лёгкому прогнозированию.
Диаграмма наследования
Исключения типа std::runtime_error выбрасываются следующими компонентами стандартной библиотеки:
| (начиная с C++20) |
Кроме того, от std::runtime_error производятся следующие типы стандартных исключений:
| (начиная с C++11) |
| (начиная с C++17) |
| (начиная с C++20) |
Функции-члены
|
(constructor) | создаёт объект runtime_error с заданным сообщением (открытая функция-член) |
|
operator= | заменяет объект runtime_error (открытая функция-член) |
std::runtime_error::runtime_error
runtime_error( const std::string& what_arg ); | (1) | |
runtime_error( const char* what_arg ); | (2) | |
runtime_error( const runtime_error& other ); | (3) | (noexcept начиная с C++11) |
what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg.c_str()) == 0.what_arg в качестве поясняющей строки. После создания std::strcmp(what(), what_arg) == 0.*this и other имеют динамический тип std::runtime_error, то std::strcmp(what(), other.what()) == 0. Конструктор копирования не может выбросить исключение.Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключения
std::bad_alloc.Примечания
Поскольку копирование std::runtime_error не должно приводить к выбрасыванию исключений, это сообщение обычно хранится внутри объекта в виде отдельно выделенной строки со счётчиком ссылок. По этой же причине нет конструктора, принимающего std::string&&: содержимое всё равно пришлось бы копировать.
До принятия решения по вопросу LWG 254 конструктор, отличный от конструктора копирования, мог принимать только std::string. Для создания объекта std::string динамическое выделение памяти становилось обязательным.
После принятия решения по вопросу LWG 471 производный класс стандартного исключения должен иметь общедоступный конструктор копирования. Его можно определить неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного объекта и его копии.
std::runtime_error::operator=
runtime_error& operator=( const runtime_error& other ); | (noexcept начиная с C++11) |
Присваивает содержимому содержимое объекта other. Если *this и other имеют динамический тип std::runtime_error, то после присваивания std::strcmp(what(), other.what()) == 0. Оператор присваивания копированием не может выбросить исключение.
Параметры
| other | - | другой объект исключения, содержимое которого присваивается |
Возвращаемое значение
*this
Примечания
После принятия решения по вопросу LWG 471 производный класс стандартного исключения должен иметь общедоступный оператор присваивания копированием. Его можно определить неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного объекта и его копии.
Унаследовано от std::exception
Функции-члены
|
[virtual] | уничтожает объект исключения (виртуальная открытая функция-член std::exception) |
|
[virtual] | возвращает поясняющую строку (виртуальная открытая функция-член std::exception) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Исправленное поведение |
|---|---|---|---|
| LWG 254 | C++98 | отсутствовал конструктор, принимающий const char* | добавлен |
| LWG 471 | C++98 | поясняющие строки копий std::runtime_errorопределялись реализацией | они совпадают с поясняющей строкой исходного объекта std::runtime_error |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/error/runtime_error