0Pricing
C++ Academy · Lezione

Rappresentare l'assenza con optional

Evitare i puntatori null

Rappresentare l'assenza con optional è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 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.

Il problema dei valori nulli

Restituire un valore sentinella come -1 o un puntatore nullo per indicare "nessun valore" è fragile e può essere facilmente usato in modo errato. std::optional<T> rappresenta esplicitamente "un valore oppure niente". Includa <optional>.

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

Un optional vuoto

La costruzione predefinita di un optional, oppure l'assegnazione di std::nullopt, produce un optional vuoto che non contiene alcun valore.

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

Verificare la presenza di un valore

Chiami has_value() oppure usi direttamente l'optional in un contesto booleano per verificare se contiene un valore.

#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 come tipo restituito

È particolarmente adatto alle funzioni che potrebbero non riuscire a produrre un risultato. Restituisca il valore in caso di successo e std::nullopt in caso di errore.

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

Leggere il valore

Utilizzi *opt oppure opt.value() dopo aver verificato che contenga un valore. Il dereferenziamento di un optional vuoto con * comporta un comportamento non definito.

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

Firme autoesplicative

Un tipo restituito std::optional comunica immediatamente al chiamante che la funzione potrebbe non produrre un risultato, senza bisogno di commenti.

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

Reimpostare un optional

Chiami reset() per rendere nuovamente vuoto un optional, oppure assegni std::nullopt.

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

Costruire direttamente

emplace costruisce il valore contenuto direttamente all'interno dell'optional, evitando una copia aggiuntiva.

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

Optional rispetto a puntatore

Un puntatore grezzo può essere nullo, ma non fornisce informazioni sulla proprietà e rischia di diventare pendente. Un optional possiede il proprio valore direttamente e segnala chiaramente "potrebbe essere assente", senza allocazione nell'heap.

Optional di riferimenti?

std::optional memorizza valori, non riferimenti. Per fare riferimento facoltativamente a un oggetto esistente, memorizzi un puntatore oppure usi std::optional<std::reference_wrapper<T>>.

Quando ricorrere a Optional

Lo utilizzi per ricerche che potrebbero non trovare risultati, analisi che potrebbero fallire o impostazioni che potrebbero non essere configurate. La lezione successiva illustra i modi sicuri per accedere al valore contenuto.

Verifica rapida

Verifichi la Sua comprensione di std::optional.

Riepilogo

Ha appreso le nozioni di base di std::optional:

  • Rappresenta "un valore oppure niente" senza valori sentinella o null.
  • Può essere vuoto per costruzione predefinita o tramite std::nullopt.
  • Lo si verifica con has_value() o con un test booleano.
  • È ideale come tipo restituito per ricerche che possono fallire.

Domande Frequenti

La lezione «Rappresentare l'assenza con optional» è gratuita?

Sì — il testo completo di «Rappresentare l'assenza con 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 «Rappresentare l'assenza con optional»?

Evitare i puntatori null 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 1 di 4.

Quanto tempo richiede la lezione «Rappresentare l'assenza con 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