Quando si usano i riferimenti vi sono alcune regole che devono essere tenute in mente:
- Un riferimento deve essere inizializzato quando è creato (un puntatore può essere inizializzato in qualunque momento).
- Quando un riferimento è stato inizializzato non può più essere modificato in modo che riferisca un altro oggetto (i puntatori possono puntare ad un altro oggetto in qualsiasi momento)
- Un riferimento punta sempre ad una zona di memoria valida e non è possible inizializzarlo a NULL
Quando una funzione restituisce un riferimento è necessario fare attenzione che la zona di memoria a cui fa riferimento sia valida anche all'esterno dello spazio di validità della funzione. In particolare un riferimento restituito all'esterno non deve mai riferire una variabile locale alla funzione.
Ad esempio:
//: C11:Reference.cpp
// Simple C++ references
int* f(int* x)
{
(*x)++;
return x; // Safe, x is outside this scope
}
int& g(int& x)
{
x++; // Same effect as in f()
return x; // Safe, outside this scope
}
int& h()
{
int q;
//! return q; // Error
static int x;
return x; // Safe, x lives outside this scope
}
int main()
{
int a = 0;
f(&a); // Ugly (but explicit)
g(a); // Clean (but hidden)
} ///:~
const reference
Dichiare il parametro di una funzione come un riferimento costante impone alcune restrizioni sul suo utilizzo da parte della funzione. Più precisamente, per i tipi predefiniti dal linguaggio impone che la funzione non possa modificare il valore dell'argomento, mentre per i tipi definiti dall'utente richiede che la funzione chiami soltanto funzioni membro const e che non modifichi alcun dato membro pubblico (in altre parole non ne può alterare lo stato).
L'utilizzo di riferimenti costanti come argomenti di funzioni è particolarmente importante, poiché la funzione potrebbe ricevere come parametro un oggetto temporaneo, sia come valore di ritorno di un'altra funzione che in modo esplicito dall'utilizzatore della funzione. Poiché gli oggetti temporanei sono implementati come oggetti costanti, se non si definisce l'argomento della funzione come riferimento const, gli oggetti temporanei non saranno mai accettati come parametri dalla funzione.
Vota questo articolo per primo
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5