Was passiert, wenn ich eine exception werfen?
Habe ich ein paar technische Fragen. In dieser Funktion:
string report() const {
if(list.begin() == list.end()){
throw "not good";
}
//do something
}
Wenn ich die Ausnahmen, was Los ist mit dem Programm? Wird meine Funktion beenden oder wird es weiter laufen? Wenn es beendet wird, welchen Wert wird es zurückkehren?
- Was macht Ihr C++ - text-Buch zu diesem Thema zu sagen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie werfen eine Ausnahme, alle Funktionen werden beendet, zurück zu dem Punkt, wo es findet eine
try...catch
- block mit einem passendencatch
geben. Wenn Ihre Funktion nicht aufgerufen innerhalb einer try-block, wird das Programm beendet sich mit eine nicht behandelte Ausnahme.Check-out https://isocpp.org/wiki/faq/exceptions für mehr info.
Wird es im Grunde gehen durch den Stapel, bis es findet einen exception-handler; es wird an das Ende des Stapels, ohne einen zu finden, wird Ihr Programm Abstürzen. Wenn es hat finden, wird es Zurückspulen bis zu stapeln, die zeigen, führen Sie den handler, und fahren Sie mit der code nach der hf-block, jedoch weit bis in den stack zu können.
Können Sie alle möglichen details über den C++ - exception-handling-Mechanismus, durch Google. Hier ist ein head-start.
Da bist du nicht die exception zu fangen, die im Kontext der Funktion, die Funktion wird beendet, und der Stapel wird abgewickelt, wie es aussieht für ein exception-handler (catch-block, der würde passen entweder string oder der generische catch(...)). Wenn es nicht finden, das Programm zu beenden.
Ihrer Funktion sofort zu beenden, und es wird nicht etwas zurückzugeben. Wenn es keine catch-Anweisungen abfangen der Ausnahme, die "oben auf dem Aufruf-Kette", die Anwendung wird beendet.
Er nicht zurückkehren wird, wird es in der Tat beenden, und erreichen das "nächste" (call-stack-Weise)
try...catch
block.Wenn keiner gefunden wird, die meisten der Zeit, die das Programm nur beendet wird, auf einigen Plattformen kann der Fehler gedruckt werden, ich weiß nicht, die Besonderheiten, dass, obwohl (und wahrscheinlich nur diejenigen, abgeleitet von std::exception).
Dies vielleicht ein guter Ausgangspunkt zum Verständnis der Ausnahmen.
Exception handling in C++