Muster zur Fehlerbehandlung
optional und expected kombinieren
Muster zur Fehlerbehandlung ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.
Zwei Werkzeuge, ein Ziel
std::optional und std::expected ersetzen beide fehleranfällige Sentinelwerte. Diese Lektion zeigt Muster, mit denen Sie sie sauber kombinieren und verketten.
Frühe Rückgabe bei leerem Wert
Ein einfaches, gut lesbares Muster: Prüfen Sie das optional und brechen Sie frühzeitig ab, wenn es leer ist, bevor Sie fortfahren.
#include <iostream>
#include <optional>
std::optional<int> parse(bool ok) { return ok ? std::optional<int>(5) : std::nullopt; }
int main() {
auto v = parse(true);
if (!v) { std::cout << "no value\n"; return 0; }
std::cout << *v + 1 << "\n";
}Optional zu Expected
Konvertieren Sie ein fehlendes optional in einen beschriebenen Fehler, wenn der Aufrufer einen Grund benötigt.
#include <expected>
#include <optional>
#include <string>
std::expected<int, std::string> require(std::optional<int> o) {
if (o) return *o;
return std::unexpected("value missing");
}
int main() {}Verketten mit value_or
Wenn mehrere Suchvorgänge in ein gemeinsames Ergebnis einfließen, können Sie mit value_or Standardwerte direkt angeben, ohne verschachtelte if-Anweisungen zu verwenden.
#include <iostream>
#include <optional>
int setting(std::optional<int> user, int fallback) {
return user.value_or(fallback);
}
int main() {
std::cout << setting(std::nullopt, 42) << "\n";
}Fehler nach oben weiterleiten
Mit std::expected kann eine Funktion den Fehler eines Unteraufrufs prüfen und unverändert weiterleiten, wodurch eine Fehlerpipeline entsteht.
#include <expected>
#include <string>
using R = std::expected<int, std::string>;
R step1(bool ok) { return ok ? R(2) : R(std::unexpected("step1 failed")); }
R run(bool ok) {
auto r = step1(ok);
if (!r) return std::unexpected(r.error());
return *r * 10;
}
int main() {}Monadic and_then
C++23 and_then verkettet Operationen, die jeweils ein optional oder expected zurückgeben, und bricht beim ersten Fehler ab – ganz ohne manuelle if-Kaskade.
transform zum Abbilden
transform wendet eine gewöhnliche Funktion auf den Erfolgswert an und lässt Fehler oder leere Werte unverändert. Es bildet also nur den erfolgreichen Pfad ab.
or_else zur Fehlerbehandlung
or_else führt eine Fallback-Funktion aus, die einen Ersatzwert oder einen alternativen Fehler liefern kann, wenn der ursprüngliche Wert fehlt oder ein Fehler aufgetreten ist.
Die richtige Wahl treffen
Verwenden Sie optional, wenn das Fehlen keiner Erklärung bedarf (etwa bei einem Cache-Fehltreffer). Verwenden Sie expected, wenn der Aufrufer Fehlergründe unterscheiden muss (etwa Analyse- und Berechtigungsfehler).
Gemischte Sentinelwerte vermeiden
Mischen Sie in einer API keine herkömmlichen Fehlercodes mit optional/expected. Wählen Sie eine einheitliche Strategie, damit Aufrufer Fehler überall gleich behandeln.
Fehler typisiert halten
Bevorzugen Sie für den Fehlertyp ein enum oder eine kleine struct statt einfacher Zeichenketten, wenn Fehler programmgesteuert geprüft werden. Zeichenketten eignen sich am besten für Meldungen an Benutzer.
Kurzer Test
Überprüfen Sie Ihr Verständnis von Mustern zur Fehlerbehandlung.
Zusammenfassung
Sie haben Muster zur Fehlerbehandlung kennengelernt:
- Frühe Rückgaben bei leeren Werten oder Fehlern halten den Code übersichtlich.
- Konvertieren Sie optional zu expected, wenn ein Grund benötigt wird.
- Verketten Sie mit
and_then,transformundor_else(C++23). - Bleiben Sie konsistent und vermeiden Sie die Mischung von Sentinelwerten mit optional/expected.
Häufig gestellte Fragen
Ist die Lektion „Muster zur Fehlerbehandlung“ kostenlos?
Ja — der vollständige Text von „Muster zur Fehlerbehandlung“ 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 „Muster zur Fehlerbehandlung“?
optional und expected kombinieren 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 4 von 4.
Wie lange dauert die Lektion „Muster zur Fehlerbehandlung“?
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
- Fehlen mit optional darstellen
- Auf optional-Werte zugreifen
- Grundlagen von std::expected
- Muster zur Fehlerbehandlung