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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow