Inizializzare i riferimenti
Le variabili di tipo riferimento devono essere inizializzate con un oggetto del tipo da cui il tipo riferimento viene derivato, o a un oggetto di un tipo che può essere convertito nel tipo da cui il tipo riferimento viene derivato.Di seguito è riportato un esempio:
// initializing_references.cpp
int iVar;
long lVar;
int main() {
long& LongRef1 = lVar; // No conversion required.
long& LongRef2 = iVar; // C2440
const long& LongRef3 = iVar; // OK
LongRef1 = 23L; // Change lVar through a reference.
LongRef2 = 11L; // Change iVar through a reference.
LongRef3 = 11L; // C3892
}
L'unico modo per inizializzare un riferimento a un oggetto temporaneo viene di inizializzare un oggetto temporaneo costante.Una volta che vengono inizializzati, i punti di una variabile di tipo di riferimento allo stesso oggetto sempre; non può essere modificata per indicare un altro oggetto.
Sebbene la sintassi possa essere la stessa, l'inizializzazione di variabili di tipo di riferimento e l'assegnazione alle variabili dei tipi di riferimento sono semanticamente diversi.Nell'esempio precedente, le assegnazioni che cambiano iVar e lVar per renderli simili alle inizializzazioni, ma avere effetti diversi.L'inizializzazione specifica l'oggetto a cui punta variabili di tipo di riferimento; l'assegnazione viene assegnato all'oggetto restituito un oggetto con il riferimento.
Poiché sia passare un argomento di tipo riferimento a una funzione che restituisce un valore di tipo riferimento da una funzione sono inizializzazioni, gli argomenti formali di una funzione vengono inizializzati correttamente, così come i riferimenti restituiti.
Variabili di tipo di riferimento possono essere dichiarate senza inizializzatori solo in quanto segue:
Dichiarazioni di funzione (prototipi).Di seguito è riportato un esempio:
int func( int& );
Dichiarazioni di tipo restituito dalla funzione.Di seguito è riportato un esempio:
int& func( int& );
Dichiarazione di un membro della classe del tipo di riferimento.Di seguito è riportato un esempio:
class c { public: int& i; };
Dichiarazione di un oggetto specificato in modo esplicito variabile come extern.Di seguito è riportato un esempio:
extern int& iVal;
Durante l'inizializzazione di una variabile di tipo di riferimento, viene utilizzato il grafico di decisione illustrato nella figura che segue per scegliere tra la creazione di un riferimento a un oggetto o creare un oggetto temporaneo di cui punta il riferimento.
Grafico di decisione di inizializzazione dei tipi di riferimento
riferimenti a volatile tipi (dichiarati come volatile typename& identificatore) può essere inizializzato con volatile oggetti dello stesso tipo o con gli oggetti che non sono stati dichiarati come volatile.non possono, tuttavia, essere inizializzati con const oggetti di tale tipo.Analogamente, riferimenti a const tipi (dichiarati come const typename& identificatore) può essere inizializzato con const gli oggetti dello stesso tipo (o tutto ciò che contenga una conversione del tipo o con gli oggetti che non sono stati dichiarati come const).non possono, tuttavia, essere inizializzate con volatile oggetti di tale tipo.
Riferimenti che non sono qualificati con nessuna const o volatile la parola chiave può essere inizializzato solo con gli oggetti dichiarati come nessuno const né volatile.