std:: out_of_range
|
Определено в заголовке
<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
при вычислении константного выражения.
Однако, объекты
|
(since C++26) |
Диаграмма наследования
Содержание |
Функции-члены
|
(конструктор)
|
создает новый объект
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) |
std::out_of_range
, то
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
. Конструктор копирования не может генерировать исключения.
Параметры
| what_arg | - | поясняющая строка |
| other | - | другой объект исключения для копирования |
Исключения
Примечания
Поскольку копирование
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>
)
|