0Pricing
C++ Academy · Lektion

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.

Alle Lektionen in diesem Kurs

  1. try, catch, throw
  2. Exception-Sicherheit
  3. noexcept-Spezifizierer
  4. Benutzerdefinierte Exception-Typen
← Zurück zu C++ Academy