Namespaces
Variants

std:: out_of_range

From cppreference.net
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 std::out_of_range generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

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

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)
1) Construye el objeto de excepción con what_arg como cadena explicativa. Después de la construcción, std:: strcmp ( what ( ) , what_arg. c_str ( ) ) == 0 .
2) Construye el objeto de excepción con what_arg como cadena explicativa. Después de la construcción, std:: strcmp ( what ( ) , what_arg ) == 0 .
3) Constructor de copia. Si * this y other tienen ambos tipo dinámico 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

1,2) Puede lanzar std::bad_alloc .

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:: 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> )