Namespaces
Variants

std:: out_of_range

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

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

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

Все функции-члены std::out_of_range являются constexpr : возможно создавать и использовать объекты std::out_of_range при вычислении константного выражения.

Однако, объекты std::out_of_range обычно не могут быть constexpr , поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.

(since C++26)
cpp/error/exception cpp/error/logic error std-out of range-inheritance.svg

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

Содержание

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

(конструктор)
создает новый объект out_of_range с заданным сообщением
(public member function)
operator=
заменяет объект out_of_range
(public member function)

std::out_of_range:: out_of_range

out_of_range ( const std:: string & what_arg ) ;
(1) (constexpr since C++26)
out_of_range ( const char * what_arg ) ;
(2) (constexpr since C++26)
out_of_range ( const out_of_range & other ) ;
(3) (noexcept since C++11)
(constexpr since C++26)
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 issue 254 , не-копирующий конструктор мог принимать только std::string . Это делало динамическое выделение памяти обязательным для создания объекта std::string .

После решения LWG issue 471 , производный класс стандартного исключения должен иметь публично доступный конструктор копирования. Он может быть неявно определен, если поясняющие строки, полученные с помощью what() , одинаковы для исходного объекта и скопированного объекта.

std::out_of_range:: operator=

out_of_range & operator = ( const out_of_range & other ) ;
(noexcept начиная с C++11)
(constexpr начиная с C++26)

Присваивает содержимое объекта other . Если * this и other оба имеют динамический тип std::out_of_range , то std:: strcmp ( what ( ) , other. what ( ) ) == 0 после присваивания. Оператор копирующего присваивания не может генерировать исключения.

Параметры

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 .

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr типы исключений

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам 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> )