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 error

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

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

(конструктор)
создаёт новый объект 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)
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. Конструктор копирования не может выбросить исключение.

Параметры

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

Исключения

1,2) Может выбросить 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)
what
[виртуальная]
возвращает поясняющую строку
(виртуальная общедоступная функция-член 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/cpp/error/out_of_range

Spec-Zone.ru

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