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::nulloptgeleert. - 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
- Fehlen mit optional darstellen
- Auf optional-Werte zugreifen
- Grundlagen von std::expected
- Muster zur Fehlerbehandlung