0Pricing
C++ Academy · Lektion

Fehlen mit optional darstellen

Nullzeiger vermeiden

Fehlen mit optional darstellen 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.

Das Problem mit Null

Ein Sentinel wie -1 oder ein Nullzeiger, der „kein Wert“ bedeutet, ist fehleranfällig und kann leicht falsch verwendet werden. std::optional<T> stellt „ein Wert oder nichts“ ausdrücklich dar. Binden Sie <optional> ein.

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

Eine leere Optional

Wenn Sie eine Optional standardkonstruieren oder std::nullopt zuweisen, erhalten Sie eine leere Optional ohne enthaltenen Wert.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> empty;
    std::optional<int> also = std::nullopt;
    std::cout << empty.has_value() << " " << also.has_value() << "\n";
}

Auf einen Wert prüfen

Rufen Sie has_value() auf oder verwenden Sie die Optional direkt in einem booleschen Kontext, um zu prüfen, ob sie einen Wert enthält.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 5;
    if (o) std::cout << "has value\n";
    if (o.has_value()) std::cout << "yes\n";
}

Optional als Rückgabetyp

Funktionen, die möglicherweise kein Ergebnis liefern können, eignen sich dafür hervorragend. Geben Sie bei Erfolg den Wert und bei einem Fehler std::nullopt zurück.

#include <iostream>
#include <optional>
std::optional<int> half(int n) {
    if (n % 2 == 0) return n / 2;
    return std::nullopt;
}
int main() {
    auto r = half(10);
    if (r) std::cout << *r << "\n";
}

Den Wert lesen

Verwenden Sie *opt oder opt.value(), sobald Sie wissen, dass ein Wert enthalten ist. Das Dereferenzieren einer leeren Optional mit * ist undefiniertes Verhalten.

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

Selbstdokumentierende Signaturen

Ein Rückgabetyp std::optional zeigt der aufrufenden Stelle auf einen Blick, dass die Funktion möglicherweise kein Ergebnis liefert – ganz ohne Kommentare.

#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> getEnvName(bool present) {
    if (present) return std::string("CONFIG");
    return std::nullopt;
}
int main() { std::cout << getEnvName(true).has_value() << "\n"; }

Eine Optional zurücksetzen

Rufen Sie reset() auf, um eine Optional wieder zu leeren, oder weisen Sie ihr std::nullopt zu.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 99;
    o.reset();
    std::cout << o.has_value() << "\n"; // 0
}

Direkt an Ort und Stelle konstruieren

emplace konstruiert den enthaltenen Wert direkt innerhalb der Optional und vermeidet dadurch eine zusätzliche Kopie.

#include <iostream>
#include <optional>
#include <string>
int main() {
    std::optional<std::string> o;
    o.emplace("built in place");
    std::cout << *o << "\n";
}

Optional oder Zeiger

Ein einfacher Zeiger kann null sein, sagt aber nichts über Besitzverhältnisse aus und birgt die Gefahr, dass er auf ein bereits zerstörtes Objekt zeigt. Eine Optional besitzt ihren Wert direkt und signalisiert klar „möglicherweise nicht vorhanden“, ohne eine Heap-Reservierung.

Optional mit Referenzen?

std::optional speichert Werte, keine Referenzen. Um optional auf ein vorhandenes Objekt zu verweisen, speichern Sie einen Zeiger oder verwenden Sie std::optional<std::reference_wrapper<T>>.

Wann Sie Optional verwenden sollten

Verwenden Sie sie für Suchen, die erfolglos bleiben können, für Parsing-Vorgänge, die fehlschlagen können, oder für Einstellungen, die möglicherweise nicht gesetzt sind. Die nächste Lektion behandelt sichere Möglichkeiten, auf den enthaltenen Wert zuzugreifen.

Kurzer Test

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

Zusammenfassung

Sie haben die Grundlagen von std::optional kennengelernt:

  • Stellt „ein Wert oder nichts“ ohne Sentinel-Werte oder Null dar.
  • Wird durch Standardkonstruktion oder std::nullopt geleert.
  • Wird mit has_value() oder einer booleschen Prüfung überprüft.
  • Eignet sich ideal als Rückgabetyp für fehlerschlagende Suchen.

Häufig gestellte Fragen

Ist die Lektion „Fehlen mit optional darstellen“ kostenlos?

Ja — der vollständige Text von „Fehlen mit optional darstellen“ 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 „Fehlen mit optional darstellen“?

Nullzeiger vermeiden 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 „Fehlen mit optional darstellen“?

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