0Pricing
C++ Academy · Lezione

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_or fornisce un valore predefinito.
  • Le operazioni monadiche transform/and_then consentono 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

  1. Rappresentare l'assenza con optional
  2. Accedere ai valori di optional
  3. Nozioni di base su std::expected
  4. Pattern di gestione degli errori
← Torna a C++ Academy