std:: out_of_range
|
Definido en el encabezado
<stdexcept>
|
||
|
class
out_of_range
;
|
||
Define un tipo de objeto que se lanzará como excepción. Reporta errores que son consecuencia del intento de acceder a elementos fuera del rango definido.
Puede ser lanzada por las funciones miembro de std::bitset y std::basic_string , por las familias de funciones std::stoi y std::stod , y por las funciones de acceso a miembros con verificación de límites (por ejemplo, std::vector::at y std::map::at ).
Todas las funciones miembro de
std::out_of_range
son
constexpr
: es posible crear y utilizar objetos
std::out_of_range
en la evaluación de una expresión constante.
Sin embargo, los objetos
|
(since C++26) |
Diagrama de herencia
Contenidos |
Funciones miembro
|
(constructor)
|
construye un nuevo objeto
out_of_range
con el mensaje dado
(función miembro pública) |
|
operator=
|
reemplaza el objeto
out_of_range
(función miembro pública) |
std::out_of_range:: out_of_range
|
out_of_range
(
const
std::
string
&
what_arg
)
;
|
(1) | (constexpr desde C++26) |
|
out_of_range
(
const
char
*
what_arg
)
;
|
(2) | (constexpr desde C++26) |
|
out_of_range
(
const
out_of_range
&
other
)
;
|
(3) |
(noexcept desde C++11)
(constexpr desde C++26) |
std::out_of_range
entonces
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
. Ninguna excepción puede ser lanzada desde el constructor de copia.
Parámetros
| what_arg | - | cadena explicativa |
| other | - | otro objeto de excepción a copiar |
Excepciones
Notas
Debido a que copiar
std::out_of_range
no está permitido lanzar excepciones, este mensaje normalmente se almacena internamente como una cadena con conteo de referencias asignada por separado. Esta es también la razón por la cual no hay un constructor que tome
std::string&&
: tendría que copiar el contenido de todas formas.
Antes de la resolución de LWG issue 254 , el constructor no copia solo podía aceptar std::string . Esto hace que la asignación dinámica sea obligatoria para construir un objeto std::string .
Después de la resolución de
LWG issue 471
, una clase de excepción estándar derivada debe tener un constructor de copia públicamente accesible. Puede estar definido implícitamente siempre que las cadenas explicativas obtenidas por
what()
sean las mismas para el objeto original y el objeto copiado.
std::out_of_range:: operator=
|
out_of_range
&
operator
=
(
const
out_of_range
&
other
)
;
|
(noexcept desde C++11)
(constexpr desde C++26) |
|
Asigna los contenidos con los de
other
. Si
*
this
y
other
tienen ambos el tipo dinámico
std::out_of_range
entonces
std::
strcmp
(
what
(
)
, other.
what
(
)
)
==
0
después de la asignación. Ninguna excepción puede ser lanzada desde el operador de asignación de copia.
Parámetros
| other | - | otro objeto de excepción con el cual asignar |
Valor de retorno
* this
Notas
Después de la resolución de
LWG issue 471
, una clase de excepción estándar derivada debe tener un operador de asignación de copia públicamente accesible. Puede estar definido implícitamente siempre que las cadenas explicativas obtenidas por
what()
sean las mismas para el objeto original y el objeto copiado.
Heredado de std:: logic_error
Heredado de std:: exception
Funciones miembro
|
[virtual]
|
destruye el objeto de excepción
(función miembro pública virtual de
std::exception
)
|
|
[virtual]
|
devuelve una cadena explicativa
(función miembro pública virtual de
std::exception
)
|
Notas
El error estándar std::errc::result_out_of_range típicamente indica la condición donde el resultado, en lugar de la entrada, está fuera de rango, y está más estrechamente relacionado con std::range_error y ERANGE .
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_constexpr_exceptions
|
202502L
|
(C++26) | constexpr tipos de excepción |
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 254 | C++98 | faltaba el constructor que acepta const char * | añadido |
| LWG 471 | C++98 |
las cadenas explicativas de las copias de
std::out_of_range
estaban definidas por la implementación |
son las mismas que las del objeto
original
std::out_of_range
|
Véase también
|
accede al carácter especificado con verificación de límites
(función miembro pública de
std::basic_string<CharT,Traits,Allocator>
)
|
|
|
accede al carácter especificado con verificación de límites
(función miembro pública de
std::basic_string_view<CharT,Traits>
)
|
|
|
accede al elemento especificado con verificación de límites
(función miembro pública de
std::deque<T,Allocator>
)
|
|
|
accede al elemento especificado con verificación de límites
(función miembro pública de
std::map<Key,T,Compare,Allocator>
)
|
|
|
accede al elemento especificado con verificación de límites
(función miembro pública de
std::unordered_map<Key,T,Hash,KeyEqual,Allocator>
)
|
|
|
accede al elemento especificado con verificación de límites
(función miembro pública de
std::vector<T,Allocator>
)
|
|
|
accede al elemento especificado con verificación de límites
(función miembro pública de
std::array<T,N>
)
|
|
|
(C++26)
|
accede al elemento especificado con verificación de límites
(función miembro pública de
std::span<T,Extent>
)
|