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::unexpectedzurück. - Lesen Sie den Wert mit
*/value()und den Fehler miterror()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
- Fehlen mit optional darstellen
- Auf optional-Werte zugreifen
- Grundlagen von std::expected
- Muster zur Fehlerbehandlung