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 с заданным сообщением (public функция-элемент) |
operator= |
заменяет объект out_of_range (public функция-элемент) |
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) | |
std::out_of_range
, тогда std::strcmp(what(), other.what()) == 0. Исключения не могут быть сгенерированы из конструктора копирования. (до C++11)Параметры
what_arg | — | пояснительная строка |
other | — | другой объект исключения для копирования |
Исключения
Примечание
Поскольку при копировании 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 ); |
(до 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 проблема 471, производный стандартный класс исключения должен иметь общедоступный оператор присваивания копированием. Его можно определить неявно, если поясняющие строки, полученные с помощью what()
, одинаковы для исходного объекта и скопированного объекта.
Унаследован от std::logic_error
Унаследован от std::exception
Функции-элементы
[virtual] |
уничтожает объект исключения (virtual public of std::exception функция-элемент)
|
[virtual] |
возвращает поясняющую строку (virtual public of std::exception функция-элемент)
|
[править] Примечание
Стандартное условие ошибки std::errc::result_out_of_range обычно указывает на состояние, при котором результат, а не ввод, выходит за пределы допустимого диапазона, и более тесно связано с std::range_error и ERANGE.
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
LWG 254 | C++98 | конструктор, принимающий const char*, отсутствовал | добавлен |
LWG 471 | C++98 | пояснительные строки копий std::out_of_range былиопределены реализацией |
они такие же, как у исходного объектаstd::out_of_range
|
[править] Смотрите также
обращается к указанному символу с проверкой границ (public функция-элемент std::basic_string<CharT,Traits,Allocator> )
| |
(C++17) |
получает доступ к указанному символу с проверкой границ (public функция-элемент std::basic_string_view<CharT,Traits> )
|
предоставляет доступ к указанному элементу с проверкой границ (public функция-элемент std::deque )
| |
предоставляет доступ к указанному элементу с проверкой границ (public функция-элемент std::vector )
| |
(C++11) |
предоставляет доступ к указанному элементу с проверкой границ (public функция-элемент std::array )
|