Uso dei reference
I riferimenti sono stati introdotti nel C++ come ulteriore meccanismo di passaggio
di parametri (per riferimento).
Una funzione che debba modificare i parametri attuali puo` ora essere dichiarata
in due modi diversi:
void Esempio(Tipo* Parametro);
oppure in modo del tutto equivalente
void Esempio(Tipo& Parametro);
Naturalmente cambierebbe il modo in cui chiamare la funzione:
long double Var = 0.0;
long double* Ptr = &Var;
// nel primo caso avremmo
Esempio(&Var);
// oppure
Esempio(Ptr);
// nel caso di passaggio per riferimento
Esempio(Var);
// oppure
Esempio(*Ptr);
In modo del tutto analogo a quanto visto con i puntatori e` anche possibile
ritornare un riferimento:
double& Esempio(float Param1, float Param2) {
/* ... */
double* X = new double;
/* ... */
return *X;
}
Puntatori e reference possono essere liberamente scambiati, non esiste differenza
eccetto che non e` necessario dereferenziare un riferimento e che i riferimenti
non possono associati ad un'altra variabile dopo l'inizializzazione.
Probabilmente vi starete chiedendo che motivo c'era dunque di introdurre questa
caratteristica dato che i puntatori erano gia` sufficienti. Il problema in effetti
non nasce con le funzioni, ma con gli operatori; il C++ consente anche l'overloading
degli operatori e sarebbe spiacevole dover scrivere qualcosa del tipo:
&A + &B
non si riuscirebbe a capire se si desidera sommare due indirizzi oppure i due
oggetti (che potrebbero essere troppo grossi per passarli per valore). I riferimenti
invece risolvono il problema eliminando ogni possibile ambiguita` e consentendo
una sintassi piu` chiara.
|