Spec-Zone.ru › C++

std::runtime_error

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

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

cpp/error/exception

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

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

  • std::locale::locale
  • std::locale::combine
  • std::chrono::current_zone
  • std::chrono::get_tzdb_list
  • std::chrono::get_tzdb
  • std::chrono::locate_zone
  • std::chrono::reload_tzdb
  • std::chrono::remote_version
  • std::chrono::tzdb::locate_zone
(начиная с C++20)

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

  • std::range_error
  • std::overflow_error
  • std::underflow_error
  • std::ios_base::failure
  • std::regex_error
  • std::system_error
(начиная с C++11)
  • std::filesystem::filesystem_error
(начиная с C++17)
  • std::chrono::ambiguous_local_time
  • std::chrono::nonexistent_local_time
  • std::format_error
(начиная с 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)
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 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

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

(destructor)
[virtual]
уничтожает объект исключения
(виртуальная открытая функция-член std::exception)
what
[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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API