C++ Academy · Lektion

Adgang til optional-værdier

Brug value_or og has_value

Lektion 2 af 413 trin

Adgang til optional-værdier er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Derefereringsoperatoren

Den hurtigste måde at læse en optional på er *opt, men kun når du er sikker på, at den indeholder en værdi; der udføres ingen kontrol.

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

Metoden value()

opt.value() returnerer værdien, men kaster std::bad_optional_access, hvis optionalen er tom. Brug den, når en tom optional er en reel fejl.

#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 til standardværdier

opt.value_or(fallback) returnerer den indeholdte værdi, hvis den findes, og ellers reserveværdien. Ingen forgreninger og ingen undtagelser.

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

value_or med rigtige data

En almindelig anvendelse er at angive en standardværdi for manglende konfiguration eller opslag.

#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";
}

Piloperatoren

For optionals med klasser som type tilgår opt->member medlemmer direkte, hvis optionalen ikke er tom.

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

Kontrollér før adgang

Det sikre idiom er: kontrollér, og brug derefter værdien. Når du kombinerer kontrol og adgang, undgår du både undtagelser og udefineret adfærd.

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

Init-sætning i if

Du kan erklære og kontrollere værdien på én linje ved hjælp af en init-sætning i if, så optionalen kun er synlig i grenen.

#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)

Monadehjælpere som transform anvender kun en funktion, hvis der er en værdi, og returnerer en ny optional. På den måde kan du kæde beregninger overskueligt sammen.

and_then til kædning

and_then (C++23) kalder en funktion, der selv returnerer en optional, og flader resultatet ud. Det er ideelt til trin, hvor hvert trin kan mislykkes.

Valg af adgangsmetode

Brug value_or, når du har en fornuftig standardværdi, value(), når tomhed er en fejl, der bør udløse en undtagelse, og */-> kun efter en tydelig kontrol.

Undgå ukontrolleret dereferering

Kald aldrig *opt uden først at bekræfte, at optionalen ikke er tom. Det giver udefineret adfærd og er en almindelig årsag til nedbrud.

Hurtig kontrol

Kontrollér din forståelse af adgang til optionals.

Opsummering

Du har lært at tilgå optionals:

  • * og -> efter en kontrol.
  • value() kaster en fejl, hvis optionalen er tom.
  • value_or leverer en standardværdi.
  • Monadiske transform/and_then kæder operationer sammen (C++23).
Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Adgang til optional-værdier” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Adgang til optional-værdier”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Adgang til optional-værdier”?

Brug value_or og has_value Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Adgang til optional-værdier”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Repræsentation af fravær med optional
  2. Adgang til optional-værdier
  3. Grundlæggende om std::expected
  4. Mønstre til fejlhåndtering
← Tilbage til C++ Academy