0Pricing
C++ Academy · Lektion

Grundlagen von std::expected

Werte oder Fehler zurückgeben

Grundlagen von std::expected ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Werte oder Fehler

std::expected<T, E> (C++23) enthält entweder einen erfolgreichen Wert des Typs T oder einen Fehler des Typs E. Im Gegensatz zu Optional enthält es auch den Grund für das Fehlschlagen. Binden Sie <expected> ein.

Erfolg zurückgeben

Bei Erfolg geben Sie den Wert direkt zurück; er wird als „expected“-Typ T gespeichert.

#include <expected>
#include <iostream>
std::expected<int, std::string> parse(bool ok) {
    if (ok) return 100;
    return std::unexpected("bad input");
}
int main() {
    auto r = parse(true);
    if (r) std::cout << *r << "\n";
}

Einen Fehler zurückgeben

Verpacken Sie den Fehler in std::unexpected(...), um einen Fehler zu signalisieren und trotzdem denselben Typ zurückzugeben.

#include <expected>
#include <iostream>
#include <string>
std::expected<int, std::string> div(int a, int b) {
    if (b == 0) return std::unexpected("divide by zero");
    return a / b;
}
int main() {
    auto r = div(8, 0);
    if (!r) std::cout << r.error() << "\n";
}

Erfolg überprüfen

Prüfen Sie das Ergebnis in einem booleschen Kontext oder mit has_value(). True bedeutet, dass es den Wert enthält, false, dass es den Fehler enthält.

#include <expected>
#include <iostream>
int main() {
    std::expected<int, int> r = 5;
    std::cout << r.has_value() << "\n"; // 1
}

Den Wert lesen

Verwenden Sie *r oder r.value(), um den Erfolgswert zu lesen. value() löst std::bad_expected_access aus, wenn tatsächlich ein Fehler enthalten ist.

#include <expected>
#include <iostream>
int main() {
    std::expected<int, std::string> r = 7;
    if (r) std::cout << r.value() << "\n";
}

Den Fehler lesen

Wenn sich das Ergebnis im Fehlerzustand befindet, liefert r.error() das Fehlerobjekt.

#include <expected>
#include <iostream>
#include <string>
std::expected<int, std::string> f() { return std::unexpected("nope"); }
int main() {
    auto r = f();
    if (!r) std::cout << "error: " << r.error() << "\n";
}

value_or-Ersatzwert

Wie bei Optional gibt value_or(fallback) den Erfolgswert oder einen Standardwert zurück, ohne den Fehler zu untersuchen.

#include <expected>
#include <iostream>
std::expected<int, std::string> f() { return std::unexpected("x"); }
int main() {
    std::cout << f().value_or(0) << "\n"; // 0
}

Optional vs. Expected

std::optional steht für „Wert oder nichts“, std::expected für „Wert oder einen beschriebenen Fehler“. Verwenden Sie expected, wenn Aufrufer den Grund für einen Fehler kennen müssen.

Aussagekräftige Fehlertypen

Der Fehlertyp E kann ein enum, eine struct oder eine Nachrichtenzeichenkette sein – je nachdem, was Fehler in Ihrer Domäne am besten beschreibt.

#include <expected>
#include <iostream>
enum class Err { NotFound, Denied };
std::expected<int, Err> get(bool ok) {
    if (ok) return 1;
    return std::unexpected(Err::Denied);
}
int main() {
    auto r = get(false);
    if (!r) std::cout << (int)r.error() << "\n";
}

Keine Exceptions erforderlich

Mit std::expected können Sie Fehler als gewöhnliche Rückgabewerte weitergeben. Das ist nützlich, wenn Exceptions deaktiviert oder kostspielig sind.

Hinweis zur Verfügbarkeit

std::expected ist ein C++23-Feature. Stellen Sie vor der Verwendung sicher, dass Ihr Compiler und das Standard-Flag (zum Beispiel -std=c++23) es unterstützen.

Kurzer Test

Überprüfen Sie Ihr Verständnis von std::expected.

Zusammenfassung

Sie haben std::expected kennengelernt:

  • Es enthält entweder einen Wert (T) oder einen Fehler (E).
  • Geben Sie Erfolge direkt und Fehler über std::unexpected zurück.
  • Lesen Sie den Wert mit */value() und den Fehler mit error() aus.
  • Es enthält den Grund für den Fehler – anders als optional.

Häufig gestellte Fragen

Ist die Lektion „Grundlagen von std::expected“ kostenlos?

Ja — der vollständige Text von „Grundlagen von std::expected“ 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 „Grundlagen von std::expected“?

Werte oder Fehler zurückgeben 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 3 von 4.

Wie lange dauert die Lektion „Grundlagen von std::expected“?

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. Fehlen mit optional darstellen
  2. Auf optional-Werte zugreifen
  3. Grundlagen von std::expected
  4. Muster zur Fehlerbehandlung
← Zurück zu C++ Academy