try, catch, throw
Fehler mit Exceptions behandeln
try, catch, throw ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Fehler mit throw signalisieren
Die Anweisung throw löst eine Ausnahme aus, beendet den aktuellen Ablauf und sucht im Aufrufstapel nach einem Handler.
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::runtime_error("boom");
} catch (const std::exception& e) {
std::cout << e.what() << "\n";
}
}try und catch
Code, der eine Ausnahme auslösen kann, gehört in einen try-Block; passende Handler folgen in catch-Blöcken.
#include <iostream>
#include <stdexcept>
int divide(int a, int b) {
if (b == 0) throw std::invalid_argument("divide by zero");
return a / b;
}
int main() {
try {
std::cout << divide(10, 0) << "\n";
} catch (const std::invalid_argument& e) {
std::cout << "error: " << e.what() << "\n";
}
}Per const-Referenz abfangen
Fangen Sie Ausnahmen immer per const& ab. Das Abfangen per Wert schneidet abgeleitete Ausnahmen ab und erzeugt unnötige Kopien.
Mehrere catch-Blöcke
Listen Sie die Handler von der spezifischsten bis zur allgemeinsten Variante auf. Der erste passende Block wird ausgeführt.
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::out_of_range("bad index");
} catch (const std::out_of_range& e) {
std::cout << "range: " << e.what() << "\n";
} catch (const std::exception& e) {
std::cout << "other: " << e.what() << "\n";
}
}Stack-Unwinding
Wenn eine Ausnahme ausgelöst wird, wird der Stack entrollt: Jedes lokale Objekt zwischen der Auslösestelle und dem Handler wird in umgekehrter Reihenfolge zerstört.
#include <iostream>
#include <stdexcept>
struct Trace {
~Trace() { std::cout << "unwound\n"; }
};
void f() {
Trace t;
throw std::runtime_error("x");
}
int main() {
try { f(); } catch (...) { std::cout << "caught\n"; }
}Catch-All-Handler
Ein catch (...)-Block fängt Ausnahmen jedes Typs ab. Verwenden Sie ihn sparsam, normalerweise zum Protokollieren und erneuten Auslösen der Ausnahme.
Ausnahmen erneut auslösen
Innerhalb eines Handlers löst ein einfaches throw; die aktuelle Ausnahme erneut aus und bewahrt ihren Typ, sodass ein äußerer Handler sie behandeln kann.
#include <iostream>
#include <stdexcept>
void inner() { throw std::runtime_error("deep"); }
void middle() {
try { inner(); }
catch (...) { std::cout << "logged\n"; throw; } // rethrow
}
int main() {
try { middle(); } catch (const std::exception& e) { std::cout << e.what() << "\n"; }
}Standard-Ausnahmehierarchie
Die meisten Standardausnahmen leiten sich von std::exception ab, das what() bereitstellt. Wenn Sie std::exception abfangen, behandeln Sie sie alle.
Per Wert auslösen, per Referenz abfangen
Lösen Sie temporäre Ausnahmeobjekte per Wert aus; die Laufzeitumgebung kopiert sie in einen sicheren Speicherbereich. Fangen Sie sie per Referenz ab, um ein Abschneiden zu vermeiden.
Ausnahmen und Fehlercodes
Ausnahmen trennen den Fehlerpfad vom normalen Ablauf und können nicht unbemerkt ignoriert werden – anders als Rückgabecodes. Reservieren Sie sie für Situationen, die tatsächlich außergewöhnlich sind.
Nicht abgefangene Ausnahmen beenden das Programm
Wenn kein Handler passt, wird std::terminate aufgerufen und das Programm abgebrochen. Behandeln Sie erwartete Ausnahmen immer.
Kurze Überprüfung
Testen Sie Ihr Verständnis der Ausnahmebehandlung.
Zusammenfassung
Sie haben gelernt, Fehler mit throw auszulösen, sie mit try/catch zu behandeln und wie Stack-Unwinding dabei lokale Objekte zerstört. Fangen Sie per const& ab, ordnen Sie Handler vom spezifischsten zum allgemeinsten und lösen Sie Ausnahmen mit einem einfachen throw; erneut aus.
Häufig gestellte Fragen
Ist die Lektion „try, catch, throw“ kostenlos?
Ja — der vollständige Text von „try, catch, throw“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „try, catch, throw“?
Fehler mit Exceptions behandeln Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „try, catch, throw“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.