Spec-Zone.ru › C++

std::out_of_range

Определено в заголовке <stdexcept>
class out_of_range;

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

Он может быть брошен функциями-членами std::bitset и std::basic_string, семействами функций std::stoi и std::stod, а также функциями-членами с проверкой границ (например, std::vector::at и std::map::at).

cpp/error/exception cpp/error/logic errorstd-out of range-inheritance.svg

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

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

(конструктор)
создаёт новый объект 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)
1) Создаёт объект исключения с what_arg в качестве строки пояснения. После создания std::strcmp(what(), what_arg.c_str()) == 0.
2) Создаёт объект исключения с what_arg в качестве строки пояснения. После создания std::strcmp(what(), what_arg) == 0.
3) Конструктор копирования. Если *this и other оба имеют динамический тип std::out_of_range, то std::strcmp(what(), other.what()) == 0. Исключение не может быть выброшено из конструктора копирования.(до C++11)

Параметры

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

Исключения

1,2) Может выбросить 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)
what
[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

См. также

at
обращается к указанному символу с проверкой границ
(публичная функция-член std::basic_string<CharT,Traits,Allocator>)
at
обращается к указанному символу с проверкой границ
(публичная функция-член std::basic_string_view<CharT,Traits>)
at
доступ к указанному элементу с проверкой границ
(публичная функция-член std::deque<T,Allocator>)
at
доступ к указанному элементу с проверкой границ
(публичная функция-член std::map<Key,T,Compare,Allocator>)
at
доступ к указанному элементу с проверкой границ
(публичная функция-член std::unordered_map<Key,T,Hash,KeyEqual,Allocator>)
at
доступ к указанному элементу с проверкой границ
(публичная функция-член std::vector<T,Allocator>)
at
доступ к указанному элементу с проверкой границ
(публичная функция-член std::array<T,N>)
at
(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

Spec-Zone.ru

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