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) | |
| (3) | ||
out_of_range( const out_of_range& other ); | (до C++11) | |
out_of_range( const out_of_range& other ) 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. Исключение не может быть выброшено из конструктора копирования.(до C++11)
Параметры
| what_arg | - | строка пояснения |
| other | - | другой объект исключения для копирования |
Исключения
std::bad_alloc.Примечания
Поскольку копирование std::out_of_range не допускается для выброса исключений, это сообщение обычно хранится внутри как отдельно выделенная строка с подсчётом ссылок. Это также объясняет, почему нет конструктора, принимающего std::string&&: он всё равно должен был бы скопировать содержимое.
До решения LWG issue 254 некопирующий конструктор мог принимать только std::string. Это делает динамическое выделение обязательным для построения объекта std::string.
После решения LWG issue 471, производный класс стандартного исключения должен иметь публичный конструктор копирования. Он может быть неявно определён, если строки пояснения, полученные посредством what() , совпадают для исходного объекта и скопированного объекта.
std::out_of_range::operator=
out_of_range& operator=( const out_of_range& other ); | (до C++11) | |
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 после присвоения. Исключение не может быть выброшено из оператора копирования присваивания.(до C++11)
Параметры
| other | - | другой объект исключения для присвоения |
Значение результата
*this
Примечания
После решения LWG issue 471, производный класс стандартного исключения должен иметь публичный оператор копирования присваивания. Он может быть неявно определён, если строки пояснения, полученные посредством what() , совпадают для исходного объекта и скопированного объекта.
Унаследовано от std::logic_error
Унаследовано от std::exception
Функции-члены
|
[virtual] | уничтожает объект исключения (виртуальная публичная функция-член std::exception) |
|
[virtual] | возвращает строку пояснения (виртуальная публичная функция-член 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/w/cpp/error/out_of_range