C++
Riferimenti
Ricerca…
Definire un riferimento
I riferimenti si comportano allo stesso modo, ma non del tutto come puntatori const. Un riferimento è definito dal suffisso di una &
commerciale &
di un nome di tipo.
int i = 10;
int &refi = i;
Qui, refi
è un riferimento legato a i
.
I riferimenti astraggono la semantica dei puntatori, agendo come un alias per l'oggetto sottostante:
refi = 20; // i = 20;
Puoi anche definire più riferimenti in una singola definizione:
int i = 10, j = 20;
int &refi = i, &refj = j;
// Common pitfall :
// int& refi = i, k = j;
// refi will be of type int&.
// though, k will be of type int, not int&!
I riferimenti devono essere inizializzati correttamente al momento della definizione e non possono essere modificati in seguito. Il seguente pezzo di codice causa un errore di compilazione:
int &i; // error: declaration of reference variable 'i' requires an initializer
Inoltre, non è possibile associare direttamente un riferimento a nullptr
, diversamente dai puntatori:
int *const ptri = nullptr;
int &refi = nullptr; // error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'nullptr_t'
I riferimenti C ++ sono alias di variabili esistenti
Un riferimento in C ++ è solo un Alias
o un altro nome di una variabile. Proprio come la maggior parte di noi può essere indirizzata usando il nome del passaporto e il nickname.
I riferimenti non esistono letteralmente e non occupano memoria. Se stampiamo l'indirizzo della variabile di riferimento, stamperà lo stesso indirizzo di quello della variabile a cui si riferisce.
int main() {
int i = 10;
int &j = i;
cout<<&i<<endl;
cout<<&b<<endl;
return 0;
}
Nell'esempio sopra, entrambi i cout
stamperanno lo stesso indirizzo. La situazione sarà la stessa se prendiamo una variabile come riferimento in una funzione
void func (int &fParam ) {
cout<<"Address inside function => "<<fParam<<endl;
}
int main() {
int i = 10;
cout<<"Address inside Main => "<<&i<<endl;
func(i);
return 0;
}
Anche in questo esempio, entrambi i cout
stamperanno lo stesso indirizzo.
Come sappiamo ormai che le C++ References
sono solo alias e per la creazione di un alias, dobbiamo avere qualcosa a cui l'Alias può riferirsi.
Questo è il motivo preciso per cui la dichiarazione come questa genera un errore del compilatore
int &i;
Perché, l'alias non si riferisce a nulla.