Uso generale per la restituzione di riferimenti const:
Il ritorno di un riferimento costante è comune nei casi in cui la creazione o la distruzione di una copia è costosa.
In generale, la regola è la seguente: se il passaggio e l'utilizzo di un riferimento sono più costosi rispetto alla creazione di una copia, non farlo. Se non ti è stato chiesto un subobject, normalmente è addirittura impossibile.
Altrimenti, è un ottimizzazione delle prestazioni valida per restituire riferimenti costanti, che è trasparente a codice sorgente ben educato.
Molto codice template restituisce riferimenti costanti anche dove il test sopra non indica, solo per trattare tutte le specializzazioni allo stesso modo e perché la funzione è veramente piccola e quasi è comunque garantito che sia inline.
Ora, per la carne del vostro trovo curioso (mai visto il suo come ancora):
+ Non c'è bisogno di una funzione di accesso (ancora, questo è zoppo, sarà compilato fuori comunque)
- L'oggetto è più grande (i riferimenti normalmente richiedono tanto spazio quanto i puntatori)
- Potenzialmente è necessario un allineamento migliore a causa del punto precedente.
- Non ha funzioni membro magiche, perché il compilatore non sa come copiare i riferimenti
- Per le build di debug, non è possibile aggiungere ulteriori controlli.
Lo stesso sguardo & sentono senza danni collaterali che possono essere raggiunti risultati simili indipendente tra (solo un'ulteriore verifica per soggiorno di debug impossibile):
template<typename T>
struct example {
example(T t): value{t}{}
union{
const T value;
struct{
private:
T value;
friend class example<T>;
} _value;
};
};
è solo stile. alcune persone odiano qualsiasi tipo di membro pubblico e alcuni pensano se siano immutabili/const –
Una delle principali differenze è che nella seconda versione, il chiamante non può usare il riferimento per modificare 'm_value'. E sarebbe facile aggiornare la funzione per eseguire alcune azioni di controllo o pre-acquisizione. E prima di C++ 11 dovresti iniziare il riferimento in tutti i costruttori, il che è noioso. –
Inoltre, il secondo risultato è che gli oggetti sono più piccoli –