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
- Rappresentare l'assenza con optional
- Accedere ai valori di optional
- Nozioni di base su std::expected
- Pattern di gestione degli errori