Namespaces
Variants

std:: out_of_range

From cppreference.net
Défini dans l'en-tête <stdexcept>
class out_of_range ;

Définit un type d'objet à lancer comme exception. Il signale des erreurs qui sont la conséquence d'une tentative d'accéder à des éléments en dehors de la plage définie.

Il peut être levé par les fonctions membres de std::bitset et std::basic_string , par les familles de fonctions std::stoi et std::stod , et par les fonctions d'accès aux membres avec vérification des limites (par exemple std::vector::at et std::map::at ).

Toutes les fonctions membres de std::out_of_range sont constexpr : il est possible de créer et d'utiliser des objets std::out_of_range lors de l'évaluation d'une expression constante.

Cependant, les objets std::out_of_range ne peuvent généralement pas être constexpr , car toute mémoire allouée dynamiquement doit être libérée lors de la même évaluation d'expression constante.

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

Diagramme d'héritage

Table des matières

Fonctions membres

(constructeur)
construit un nouvel objet out_of_range avec le message donné
(fonction membre publique)
operator=
remplace l'objet out_of_range
(fonction membre publique)

std::out_of_range:: out_of_range

out_of_range ( const std:: string & what_arg ) ;
(1) (constexpr depuis C++26)
out_of_range ( const char * what_arg ) ;
(2) (constexpr depuis C++26)
out_of_range ( const out_of_range & other ) ;
(3) (noexcept depuis C++11)
(constexpr depuis C++26)
1) Construit l'objet d'exception avec what_arg comme chaîne explicative. Après construction, std:: strcmp ( what ( ) , what_arg. c_str ( ) ) == 0 .
2) Construit l'objet d'exception avec what_arg comme chaîne explicative. Après construction, std:: strcmp ( what ( ) , what_arg ) == 0 .
3) Constructeur de copie. Si * this et other ont tous deux le type dynamique std::out_of_range alors std:: strcmp ( what ( ) , other. what ( ) ) == 0 . Aucune exception ne peut être levée depuis le constructeur de copie.

Paramètres

what_arg - chaîne explicative
other - autre objet d'exception à copier

Exceptions

1,2) Peut lever std::bad_alloc .

Notes

Étant donné que la copie de std::out_of_range n'est pas autorisée à lever des exceptions, ce message est généralement stocké en interne sous forme de chaîne à comptage de références allouée séparément. C'est aussi pourquoi il n'y a pas de constructeur prenant std::string&& : il devrait de toute façon copier le contenu.

Avant la résolution de LWG issue 254 , le constructeur non-copie ne pouvait accepter que std::string . Cela rendait l'allocation dynamique obligatoire pour construire un objet std::string .

Après la résolution de LWG issue 471 , une classe d'exception standard dérivée doit avoir un constructeur de copie accessible publiquement. Il peut être implicitement défini tant que les chaînes explicatives obtenues par what() sont les mêmes pour l'objet original et l'objet copié.

std::out_of_range:: operator=

out_of_range & operator = ( const out_of_range & other ) ;
(noexcept depuis C++11)
(constexpr depuis C++26)

Assigne le contenu avec celui de other . Si * this et other ont tous deux le type dynamique std::out_of_range alors std:: strcmp ( what ( ) , other. what ( ) ) == 0 après l'assignation. Aucune exception ne peut être levée par l'opérateur d'assignation de copie.

Paramètres

other - un autre objet exception à assigner

Valeur de retour

* this

Notes

Après la résolution de LWG issue 471 , une classe d'exception standard dérivée doit avoir un opérateur d'assignation de copie accessible publiquement. Il peut être défini implicitement tant que les chaînes explicatives obtenues par what() sont les mêmes pour l'objet original et l'objet copié.

Hérité de std:: exception

Fonctions membres

[virtuel]
détruit l'objet exception
(fonction membre publique virtuelle de std::exception )
[virtuel]
retourne une chaîne explicative
(fonction membre publique virtuelle de std::exception )

Notes

L'erreur standard std::errc::result_out_of_range indique généralement la condition où le résultat, plutôt que l'entrée, est hors limites, et est plus étroitement liée à std::range_error et ERANGE .

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr types d'exception

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 254 C++98 le constructeur acceptant const char * était manquant ajouté
LWG 471 C++98 les chaînes explicatives des copies de std::out_of_range
étaient définies par l'implémentation
elles sont identiques à celles de l'objet
original std::out_of_range

Voir aussi

accède au caractère spécifié avec vérification des limites
(fonction membre publique de std::basic_string<CharT,Traits,Allocator> )
accède au caractère spécifié avec vérification des limites
(fonction membre publique de std::basic_string_view<CharT,Traits> )
accède à l'élément spécifié avec vérification des limites
(fonction membre publique de std::deque<T,Allocator> )
accède à l'élément spécifié avec vérification des limites
(fonction membre publique de std::map<Key,T,Compare,Allocator> )
accède à l'élément spécifié avec vérification des limites
(fonction membre publique de std::unordered_map<Key,T,Hash,KeyEqual,Allocator> )
accède à l'élément spécifié avec vérification des limites
(fonction membre publique de std::vector<T,Allocator> )
accède à l'élément spécifié avec vérification des limites
(fonction membre publique de std::array<T,N> )
(C++26)
accède à l'élément spécifié avec vérification des limites
(fonction membre publique de std::span<T,Extent> )