Condividi tramite


Riferimenti (C++)

Un riferimento, analogamente a un puntatore, archivia l'indirizzo di un oggetto che si trova in un'altra posizione in memoria. A differenza di un puntatore, un riferimento dopo l'inizializzazione non può essere fatto per fare riferimento a un oggetto diverso o impostato su Null. Esistono due tipi di riferimenti: riferimenti lvalue , che fanno riferimento a una variabile denominata e riferimenti rvalue , che fanno riferimento a un oggetto temporaneo. L'operatore & indica un riferimento lvalue e l'operatore && indica un riferimento rvalue o un riferimento universale (rvalue o lvalue) a seconda del contesto.

È possibile dichiarare i riferimenti tramite la seguente sintassi:

[storage-class-specifiers] [cv-qualificatori] type-specifiers [ms-modifier] declarator [= expression];

È possibile utilizzare qualsiasi dichiaratore valido che specifica un riferimento. A meno che il riferimento non sia un riferimento al tipo di funzione o di matrice, si applica la sintassi seguente semplificata:

[storage-class-specifiers] [cv-qualificatori] type-specifiers [& o &&] [cv-qualificatori] identificatore [= espressione];

I riferimenti vengono dichiarati tramite la seguente sequenza:

  1. Gli identificatori di dichiarazione:

    • Identificatore della classe di archiviazione facoltativo.
    • Qualificatori facoltativi const e/o volatile .
    • Il tipo di identificatore: il nome di un tipo.
  2. Dichiaratore:

    • Modificatore specifico di Microsoft facoltativo. Per altre informazioni, vedere Modificatori specifici di Microsoft.

    • & Operatore o && operatore.

    • Qualificatori e/o volatile facoltativiconst.

    • Identificatore.

  3. Inizializzatore facoltativo.

I moduli dichiarativi più complessi per i puntatori a matrici e funzioni si applicano anche ai riferimenti a matrici e funzioni. Per altre informazioni, vedere Puntatori.

Più dichiaratori e inizializzatori possono essere visualizzati in un elenco separato da virgola che segue un singolo identificatore di dichiarazione. Ad esempio:

int &i;
int &i, &j;

I riferimenti, i puntatori e gli oggetti possono essere dichiarati insieme:

int &ref, *ptr, k;

Un riferimento contiene l'indirizzo di un oggetto, ma dal punto di vista sintattico si comporta come un oggetto.

Nel seguente programma osservare come il nome dell'oggetto, s e il riferimento all'oggetto, SRef, possano essere utilizzati in modo identico nei programmi:

Esempio

// references.cpp
#include <stdio.h>
struct S {
   short i;
};

int main() {
   S  s;   // Declare the object.
   S& SRef = s;   // Declare and initialize the reference.
   s.i = 3;

   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);

   SRef.i = 4;
   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);
}
3
3
4
4

Vedi anche

Argomenti della funzione tipo-riferimento
Elementi restituiti dalla funzione tipo-riferimento
Riferimenti a puntatori