std::out_of_range
Определён в заголовке <stdexcept> | ||
|---|---|---|
class out_of_range; |
Определяет тип объекта, который может быть выброшен как исключение. Сообщает об ошибках, возникающих при попытке доступа к элементам за пределами заданного диапазона.
Может быть выброшено функциями-членами std::bitset и std::basic_string, семействами функций std::stoi и std::stod, а также функциями-членами с проверкой границ (например, std::vector::at и std::map::at).
Диаграмма наследования
Функции-члены
|
(конструктор) | создаёт новый объект out_of_range с заданным сообщением (общедоступная функция-член) |
|
operator= | заменяет объект out_of_range (общедоступная функция-член) |
std::out_of_range::out_of_range
out_of_range( const std::string& what_arg ); | (1) | |
out_of_range( const char* what_arg ); | (2) | |
out_of_range( const out_of_range& 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::out_of_range, то std::strcmp(what(), other.what()) == 0. Конструктор копирования не может выбросить исключение.Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключения
std::bad_alloc.Примечания
Поскольку копирование std::out_of_range не должно приводить к выбрасыванию исключений, это сообщение обычно хранится внутри объекта в виде отдельно выделенной строки со счётчиком ссылок. Поэтому также отсутствует конструктор, принимающий std::string&&: ему всё равно пришлось бы копировать содержимое.
До принятия решения по вопросу LWG 254 конструктор, не являющийся конструктором копирования, мог принимать только std::string. Для создания объекта std::string это требовало обязательного динамического выделения памяти.
После принятия решения по вопросу LWG 471 производный класс стандартного исключения должен иметь общедоступный конструктор копирования. Он может быть определён неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного и скопированного объектов.
std::out_of_range::operator=
out_of_range& operator=( const out_of_range& other ); | (noexcept начиная с C++11) |
Присваивает содержимое объекта содержимому other. Если и *this, и other имеют динамический тип std::out_of_range, то после присваивания std::strcmp(what(), other.what()) == 0. Оператор присваивания копированием не может выбросить исключение.
Параметры
| other | - | другой объект исключения, содержимое которого присваивается |
Возвращаемое значение
*this
Примечания
После принятия решения по вопросу LWG 471 производный класс стандартного исключения должен иметь общедоступный оператор присваивания копированием. Он может быть определён неявно, если поясняющие строки, полученные с помощью what(), одинаковы для исходного и скопированного объектов.
Унаследовано от std::logic_error
Унаследовано от std::exception
Функции-члены
|
[виртуальная] | уничтожает объект исключения (виртуальная общедоступная функция-член std::exception) |
|
[виртуальная] | возвращает поясняющую строку (виртуальная общедоступная функция-член std::exception) |
Примечания
Стандартное условие ошибки std::errc::result_out_of_range обычно указывает на ситуацию, когда за пределами диапазона находится результат, а не входные данные; оно теснее связано с std::range_error и ERANGE.
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение согласно опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 254 | C++98 | отсутствовал конструктор, принимающий const char* | добавлен |
| LWG 471 | C++98 | поясняющие строки копий std::out_of_rangeопределялись реализацией | они совпадают со строкой исходного объекта std::out_of_range |
См. также
| обращается к указанному символу с проверкой границ (общедоступная функция-член std::basic_string<CharT,Traits,Allocator>) |
|
| обращается к указанному символу с проверкой границ (общедоступная функция-член std::basic_string_view<CharT,Traits>) |
|
| обращается к указанному элементу с проверкой границ (общедоступная функция-член std::deque<T,Allocator>) |
|
| обращается к указанному элементу с проверкой границ (общедоступная функция-член std::map<Key,T,Compare,Allocator>) |
|
| обращается к указанному элементу с проверкой границ (общедоступная функция-член std::unordered_map<Key,T,Hash,KeyEqual,Allocator>) |
|
| обращается к указанному элементу с проверкой границ (общедоступная функция-член std::vector<T,Allocator>) |
|
| обращается к указанному элементу с проверкой границ (общедоступная функция-член std::array<T,N>) |
|
|
(C++26) | обращается к указанному элементу с проверкой границ (общедоступная функция-член std::span<T,Extent>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/error/out_of_range