Welche Ausnahmeklassen sind in der Standard-C ++ - Bibliothek enthalten und wofür sollten sie verwendet werden? Ich weiß, dass es einige neue C ++ 11-Ausnahmen gibt, bin mir aber nicht sicher, was sie sind oder wo sie sind.
102
std::exception <exception> interface (debatable if you should catch this)
std::bad_alloc <new> failure to allocate storage
std::bad_array_new_length <new> invalid array length
std::bad_cast <typeinfo> execution of an invalid dynamic-cast
std::bad_exception <exception> signifies an incorrect exception was thrown
std::bad_function_call <functional> thrown by "null" std::function
std::bad_typeid <typeinfo> using typeinfo on a null pointer
std::bad_weak_ptr <memory> constructing a shared_ptr from a bad weak_ptr
std::logic_error <stdexcept> errors detectable before the program executes
std::domain_error <stdexcept> parameter outside the valid range
std::future_error <future> violated a std::promise/std::future condition
std::invalid_argument <stdexcept> invalid argument
std::length_error <stdexcept> length exceeds its maximum allowable size
std::out_of_range <stdexcept> argument value not in its expected range
std::runtime_error <stdexcept> errors detectable when the program executes
std::overflow_error <stdexcept> arithmetic overflow error.
std::underflow_error <stdexcept> arithmetic underflow error.
std::range_error <stdexcept> range errors in internal computations
std::regex_error <regex> errors from the regular expression library.
std::system_error <system_error> from operating system or other C API
std::ios_base::failure <ios> Input or output error
Quelle: http://en.cppreference.com/w/cpp/error/exception
In der Praxis sind die meisten Ausnahmen benutzerdefinierte Ausnahmen, die von logic_error
und abgeleitet sind runtime_error
. Nicht dass diese vernachlässigt werden, aber dass viele Ausnahmen domänenspezifisch sind.
Denken Sie daran, dass eine Ausnahme widerspiegeln sollte, was schief gelaufen ist und nicht, wer sie geworfen hat. (Keine "MyProgramException")
bad_function_call, domain_error, and future_error
auf msdn sind sie am schlechtesten untersucht und erklärt :(bad_function_call
wird ausgelöst, wenn Sie ein standardmäßig erstelltes std :: function-Objekt haben und versuchen, die darin eingeschlossene Funktion aufzurufen. Da es keine umschlossene Funktion gibt, gibt es nichts aufzurufen.bad_function_call
wird ausgelöst, wenn Sie versuchenstd::function
, einen nicht bereitgestellten Aufruf aufzurufen (auch bekannt als standardmäßig erstellt oder explizit über nullptr gelöscht).future_error
wird verwendet, wenn Sie eine der vielen Voraussetzungen der Funktionen fürpromise
und verletzenfuture
. Unddomain_error
ist (theoretisch) für Fälle, in denen die Eingabe in eine Funktion außerhalb des gültigen Bereichs für diese Funktion liegt (z. B. eine negative Zahl fürstd::sqrt
).future_error
wird durch verschiedene Operationen auf Futures ausgelöst, wenn die angeforderte Operation ungültig ist oder das Objekt in einen ungültigen Zustand versetzen würde. Dies ist neu in C ++ 11, und ich kann kein Tutorial in einen Kommentar einfügen.std::exception
und stellt fest, ob es sich um C ++ 11 handelt (insbesonderestd::ios_base::failure
vonstd::exception
nach verschobenstd::system_error
). Verwendung und Header sind nur einen Link entfernt.Siehe diese Seite
quelle
c++
, nichtc++11
, und sie befinden sich alle im selben<stdexcept>
<stdexcept>
wie von ideone.com/uqM6hstd::logic_error
nichtstd::logic_failure
. Das Diagramm ist falsch!