0Pricing
C++ Academy · Lektion

Auf optional-Werte zugreifen

value_or und has_value verwenden

Auf optional-Werte zugreifen ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Dereferenzierungsoperator

Am schnellsten lesen Sie eine Optional mit *opt, aber nur, wenn Sie sicher sind, dass sie einen Wert enthält; es findet keine Prüfung statt.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 10;
    if (o) std::cout << *o << "\n";
}

Die Methode value()

opt.value() gibt den Wert zurück, löst aber eine Ausnahme aus – std::bad_optional_access –, wenn die Optional leer ist. Verwenden Sie sie, wenn eine leere Optional tatsächlich einen Fehler darstellt.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o;
    try { std::cout << o.value() << "\n"; }
    catch (const std::bad_optional_access&) { std::cout << "empty!\n"; }
}

value_or für Standardwerte

opt.value_or(fallback) gibt den enthaltenen Wert zurück, falls einer vorhanden ist, andernfalls den Ersatzwert. Keine Verzweigungen, keine Ausnahmen.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = std::nullopt;
    std::cout << o.value_or(-1) << "\n"; // -1
}

value_or mit echten Daten

Eine häufige Verwendung ist die Bereitstellung eines Standardwerts für fehlende Konfigurationen oder Suchergebnisse.

#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> lookup(bool found) {
    if (found) return std::string("Pro");
    return std::nullopt;
}
int main() {
    std::cout << lookup(false).value_or("Free") << "\n";
}

Pfeiloperator

Bei Optionals von Klassentypen greift opt->member direkt auf Member zu (wiederum unter der Annahme, dass ein Wert enthalten ist).

#include <iostream>
#include <optional>
#include <string>
int main() {
    std::optional<std::string> o = std::string("hello");
    if (o) std::cout << o->size() << "\n";
}

Vor dem Zugriff absichern

Das sichere Muster lautet: prüfen, dann verwenden. Die Kombination aus Prüfung und Zugriff vermeidet sowohl Ausnahmen als auch undefiniertes Verhalten.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 7;
    if (o.has_value()) {
        int x = *o;
        std::cout << x * 2 << "\n";
    }
}

Init-Anweisung in if

Sie können eine Variable deklarieren und sie in einer Zeile mit einer If-Init-Anweisung prüfen, sodass die Optional auf den Zweig beschränkt bleibt.

#include <iostream>
#include <optional>
std::optional<int> find() { return 3; }
int main() {
    if (auto v = find(); v.has_value())
        std::cout << *v << "\n";
}

Transform (C++23)

Monadenartige Hilfsfunktionen wie transform wenden eine Funktion nur an, wenn ein Wert vorhanden ist, und geben eine neue Optional zurück. So lassen sich Berechnungen übersichtlich verketten.

and_then zum Verketten

and_then (C++23) ruft eine Funktion auf, die selbst eine Optional zurückgibt, und glättet das Ergebnis. Das eignet sich ideal für aufeinanderfolgende Schritte, von denen jeder fehlschlagen kann.

Den passenden Zugriff auswählen

Verwenden Sie value_or, wenn Sie einen sinnvollen Standardwert haben, value(), wenn eine leere Optional ein Fehler ist, der eine Ausnahme rechtfertigt, und */-> nur nach einer ausdrücklichen Prüfung.

Ungeprüfte Dereferenzierung vermeiden

Rufen Sie *opt niemals auf, ohne zuvor zu bestätigen, dass die Optional nicht leer ist. Das wäre undefiniertes Verhalten und eine häufige Ursache für Abstürze.

Kurzer Test

Überprüfen Sie Ihr Verständnis des Zugriffs auf Optionals.

Zusammenfassung

Sie haben gelernt, wie Sie auf Optionals zugreifen:

  • * und -> nach einer Prüfung.
  • value() löst bei einer leeren Optional eine Ausnahme aus.
  • value_or liefert einen Standardwert.
  • Monadenartige Funktionen wie transform/and_then verketten Operationen (C++23).

Häufig gestellte Fragen

Ist die Lektion „Auf optional-Werte zugreifen“ kostenlos?

Ja — der vollständige Text von „Auf optional-Werte zugreifen“ 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 „Auf optional-Werte zugreifen“?

value_or und has_value verwenden 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 2 von 4.

Wie lange dauert die Lektion „Auf optional-Werte zugreifen“?

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