Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Gli ideali hanno strane propriet?, fra le altre anche quella di trasformarsi nel loro contrario quando si vuol seguirli scrupolosamente.

Robert Musil 

Sondaggio:

Quale browser utilizzate?

Internet Explorer
Mozilla/Netscape
Opera
Lynx
Konqueror
Altro

visualizza risultati


 

Reference

I reference (riferimenti) sono sotto certi aspetti un costrutto a meta` tra puntatori e le usuali variabili: come i puntatori essi sono contenitori di indirizzi, ma non e` necessario dereferenziarli per accedere all'oggetto puntato (si usano come se fossero normali variabili). In pratica possiamo vedere i reference come un meccanismo per creare alias di variabili, anche se in effetti questa e` una definizione non del tutto esatta.
Cosi` come un puntatore viene indicato nelle dichiarazioni dal simbolo *, un reference viene indicato dal simbolo &:

 

int Var = 5;
float f = 0.5;

int* IntPtr = &Var;
int& IntRef = Var;   // nei reference non serve
float& FloatRef = f; // utilizzare & a destra di =

 

Le ultime due righe dichiarano rispettivamente un riferimento a int e uno a float che vengono subito inizializzati usando le due variabili dichiarate prima. Un riferimento va inizializzato immediatamente, e dopo l'inizializzazione non puo` essere piu` cambiato; si noti che non e` necessario utilizzare l'operatore & (indirizzo di) per eseguire l'inizializzazione. Dopo l'inizializzazione il riferimento potra` essere utilizzato in luogo della variabile cui e` legato, utilizzare l'uno o l'altro sara` indifferente:

 

cout << "Var = " << Var << endl;
cout << "IntRef = " << IntRef << endl;
cout << "Assegnamento a IntRef..." << endl;
IntRef = 8;
cout << "Var = " << Var << endl;
cout << "IntRef = " << IntRef << endl;
cout << "Assegnamento a Var..." << endl;
Var = 15;
cout << "Var = " << Var << endl;
cout << "IntRef = " << IntRef << endl;

 

Ecco l'output del precedente codice:

 

Var = 5
IntRef = 5
Assegnamento a IntRef...
Var = 8
IntRef = 8;
Assegnamento a Var...
Var = 15
IntRef = 15

 

Dall'esempio si capisce perche`, dopo l'inizializzazione, un riferimento non possa essere piu` associato ad un nuovo oggetto: ogni assegnamento al riferimento si traduce in un assegnamento all'oggetto riferito.
Un riferimento puo` essere inizializzato anche tramite un puntatore:

 

int* IntPtr = new int(5);
// il valore tra parentesi specifica il valore cui
// inizializzare l'oggetto allocato. Per adesso il
// metodo funziona solo con i tipi primitivi.

int& IntRef = *IntPtr;

 

Si noti che il puntatore va dereferenziato, altrimenti si legherebbe il riferimento al puntatore (in questo caso l'uso del riferimento comporta implicitamente una conversione da int* a int).
Ovviamente il metodo puo` essere utilizzato anche con l'operatore new:

 

double& DoubleRef = *new double;

// Ora si puo` accedere all'oggetto allocato
// tramite il riferimento.

DoubleRef = 7.3;
// Di nuovo, e` compito del programmatore
// distruggere l'oggetto crato con new

delete &DoubleRef;

// Si noti che va usato l'operatore &, per
// indicare l'intenzione di deallocare
// l'oggetto riferito, non il riferimento!

 

L'uso dei riferimenti per accedere a oggetti dinamici e` sicuramente molto comodo perche` e` possibile uniformare tali oggetti alle comuni variabili, tuttavia e` una pratica che bisognerebbe evitare perche` puo` generare confusione e di conseguenza errori assai insidiosi.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2022 Cataldo Sasso