137 votes

Quelles classes d'exception se trouvent dans la bibliothèque standard C++ ?

Quelles sont les classes d'exception incluses dans la bibliothèque standard de C++, et à quoi devraient-elles servir ? Je sais qu'il y a quelques nouvelles exceptions C++11, mais je ne suis pas sûr de ce qu'elles sont ou où elles se trouvent.

182voto

Mooing Duck Points 27497
std::exception  interface (débat si vous devriez attraper cela)
    std::bad_alloc  échec de l'allocation de stockage
        std::bad_array_new_length  longueur de tableau non valide
    std::bad_cast  exécution d'une conversion dynamique invalide
    std::bad_exception  signale qu'une exception incorrecte a été lancée
    std::bad_function_call  lancé par une fonction std :: function "null"
    std::bad_typeid  utilisation du typeinfo sur un pointeur nul
    std::bad_weak_ptr  construction d'un std :: shared_ptr à partir d'un std :: bad_weak_ptr
    std::logic_error  erreurs détectables avant l'exécution du programme
        std::domain_error  paramètre en dehors de la plage valide
        std::future_error  violation d'une condition std :: promise / std :: future
        std::invalid_argument  argument invalide
        std::length_error  la longueur dépasse sa taille maximale autorisée
        std::out_of_range  valeur d'argument pas dans sa plage attendue
    std::runtime_error  erreurs détectables lors de l'exécution du programme
        std::overflow_error  erreur de débordement arithmétique.
        std::underflow_error  erreur de sous-débit arithmétique.
        std::range_error  erreurs de plage dans les calculs internes
        std::regex_error  erreurs de la bibliothèque d'expressions régulières.
        std::system_error  du système d'exploitation ou d'une autre API C
            std::ios_base::failure  Erreur d'entrée ou de sortie

Source: http://en.cppreference.com/w/cpp/error/exception
En pratique, la plupart des exceptions sont des exceptions personnalisées dérivées de logic_error et runtime_error. Ce n'est pas que ces derniers soient négligés, mais que de nombreuses exceptions sont spécifiques à un domaine.

Gardez à l'esprit qu'une exception doit refléter ce qui s'est mal passé et pas qui l'a déclenchée. (Pas de "MyProgramException")

0 votes

bad_function_call, domain_error et future_error sur msdn sont les pires exemples et expliqués :(

0 votes

bad_function_call est lancé lorsque vous avez un objet std::function construit par défaut et que vous tentez d'appeler la fonction qu'il encapsule. Comme il n'y a pas de fonction encapsulée, il n'y a rien à appeler.

1 votes

bad_function_call est lancée lorsque vous essayez d'invoquer std::function qui n'est pas prête (c'est-à-dire, construite par défaut ou explicitement effacée via nullptr). future_error est utilisée lorsque vous violez l'une des nombreuses préconditions des fonctions pour la promise et le future. Et domain_error est (en théorie) pour les cas où l'entrée d'une fonction est en dehors de la plage valide de cette fonction (comme un nombre négatif pour std::sqrt).

56voto

TemplateRex Points 26447

Consultez ce site

entrez ici la description de l'image

Exception               Description
===================================
std::exception          Une exception et la classe parent de toutes les exceptions standard en C++.
std::bad_alloc          Cela peut être lancé par new.
std::bad_cast           Cela peut être lancé par dynamic_cast.
std::bad_exception      C'est un dispositif utile pour gérer les exceptions inattendues dans un programme C++.
std::bad_typeid         Cela peut être lancé par typeid.
std::logic_error        Une exception qui peut théoriquement être détectée en lisant le code.
std::domain_error       C'est une exception lancée lorsqu'un domaine mathématiquement invalide est utilisé.
std::invalid_argument   Cela est lancé en raison d'arguments invalides.
std::length_error       Cela est lancé lorsqu'une std::string trop grande est créée.
std::out_of_range       Cela peut être lancé par la méthode at par exemple d'un std::vector et std::bitset<>::operator[]().
std::runtime_error      Une exception qui théoriquement ne peut pas être détectée en lisant le code.
std::overflow_error     Cela est lancé en cas de dépassement mathématique.
std::range_error        Cela se produit lorsque vous essayez de stocker une valeur qui est hors de portée.
std::underflow_error    Cela est lancé en cas de sous-débordement mathématique.

1 votes

C'est bien, mais il manque les exceptions C++11, et cela ne montre pas quelles exceptions se trouvent dans quels en-têtes.

3 votes

@MooingDuck Votre question a été étiquetée c++, pas c++11, et ils se trouvent tous dans le même

13 votes

C++ signifie la dernière version, tandis que C++11 et C++03 concernent ces versions spécifiques. ma question ne concerne pas une version spécifique, juste les informations les plus récentes sur C++. De toute façon, je vais modifier la question pour mentionner C++11. De plus, toutes ces erreurs ne sont pas dans comme le montre ideone.com/uqM6h

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X