c'è davvero qualcosa che ha riferimenti alle forse esistenti oggetto semantica. Si chiama un puntatore (const). Un semplice puntatore non proprietario. Ci sono tre differenze tra riferimenti e puntatori:
- I puntatori possono essere nulli, i riferimenti non si può. Questa è esattamente la differenza che vuoi aggirare con
std::optional
.
- I puntatori possono essere reindirizzati per indicare qualcos'altro. Rendilo const, e anche questa differenza scompare.
- I riferimenti non devono essere dereferenziati da
->
o *
. Questo è puro zucchero sintattico e possibile a causa di 1. E la sintassi del puntatore (dereferenziamento e convertibile in bool) è esattamente ciò che fornisce per accedere al valore e testarne la presenza.
Aggiornamento: optional
è un contenitore di valori. Come altri contenitori (vector
, ad esempio) non è progettato per contenere riferimenti. Se si desidera un riferimento facoltativo, utilizzare un puntatore o se si ha effettivamente bisogno di un'interfaccia con una sintassi simile a std::optional
, creare un piccolo (e banale) wrapper per i puntatori.
Update2: Per quanto riguarda la domanda perché non c'è questa specializzazione: perché il comitato ha fatto semplicemente optare fuori. La motivazione potrebbe essere trovata da qualche parte nei documenti. Forse è perché hanno considerato i puntatori sufficienti.
fonte
2014-11-11 10:29:53
Infine concludo, che posso usare 'std :: optional>' per i miei scopi. –
Orient