Accedere ai valori di optional
Usare value_or e has_value
Accedere ai valori di optional è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Operatore di dereferenziamento
Il modo più rapido per leggere un optional è *opt, ma solo quando si è certi che contenga un valore: non viene eseguito alcun controllo.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 10;
if (o) std::cout << *o << "\n";
}Il metodo value()
opt.value() restituisce il valore, ma genera un'eccezione std::bad_optional_access se l'optional è vuoto. Lo utilizzi quando un optional vuoto rappresenta un errore effettivo.
#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 per i valori predefiniti
opt.value_or(fallback) restituisce il valore contenuto se presente, altrimenti il valore alternativo. Nessuna ramificazione e nessuna eccezione.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = std::nullopt;
std::cout << o.value_or(-1) << "\n"; // -1
}value_or con dati reali
Un utilizzo comune consiste nel fornire un valore predefinito per configurazioni o risultati di ricerche mancanti.
#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";
}Operatore freccia
Per gli optional di tipo classe, opt->member accede direttamente ai membri, sempre presumendo che l'optional non sia vuoto.
#include <iostream>
#include <optional>
#include <string>
int main() {
std::optional<std::string> o = std::string("hello");
if (o) std::cout << o->size() << "\n";
}Verificare prima dell'accesso
L'idiom sicuro è: verificare, quindi utilizzare. Combinare il controllo e l'accesso evita sia le eccezioni sia il comportamento non definito.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 7;
if (o.has_value()) {
int x = *o;
std::cout << x * 2 << "\n";
}
}Istruzione di inizializzazione in if
È possibile dichiarare e verificare in un'unica riga usando un'istruzione di inizializzazione in if, mantenendo l'optional nell'ambito del ramo.
#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)
Gli helper monadici come transform applicano una funzione solo se è presente un valore e restituiscono un nuovo optional. In questo modo è possibile concatenare facilmente i calcoli.
and_then per concatenare operazioni
and_then (C++23) chiama una funzione che a sua volta restituisce un optional e appiattisce il risultato; è ideale per sequenze di passaggi in cui ciascuno può fallire.
Scegliere l'accessor
Utilizzi value_or quando dispone di un valore predefinito sensato, value() quando l'assenza è un errore per cui vale la pena generare un'eccezione, e */-> solo dopo un controllo esplicito.
Evitare il dereferenziamento senza controllo
Non chiami mai *opt senza aver verificato che l'optional non sia vuoto. È un comportamento non definito e una causa comune di arresti anomali.
Verifica rapida
Verifichi la Sua comprensione dell'accesso agli optional.
Riepilogo
Ha imparato ad accedere agli optional:
*e->dopo un controllo.value()genera un'eccezione se l'optional è vuoto.value_orfornisce un valore predefinito.- Le operazioni monadiche
transform/and_thenconsentono di concatenare le operazioni (C++23).
Domande Frequenti
La lezione «Accedere ai valori di optional» è gratuita?
Sì — il testo completo di «Accedere ai valori di optional» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Accedere ai valori di optional»?
Usare value_or e has_value Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Accedere ai valori di optional»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Rappresentare l'assenza con optional
- Accedere ai valori di optional
- Nozioni di base su std::expected
- Pattern di gestione degli errori