Sunteți pe pagina 1din 1

References - Referinţe

O referinţă este un nume alternativ pentru un obiect. Principala folosire a referinţelor este pentru a specifica
argumentele şi valorile returnate pentru funcţii în general şi pentru supraîncărcarea operatorilor în particular. Notaţia
&X înseamnă referinţă la X.

Iniţializarea unei referinţe este obişnuită când iniţializatorul este o l-valoare (un obiect a cărui adresă o puteţi
obţine). Iniţializatorul pentru un “banal” T& trebuie să fie o l-valoare de tip T.
Iniţializatorul pentru un const T& nu trebuie să fie neapărat o l-valoare sau chiar de tip T. În acest caz:
1. mai întâi, conversia implicită la T este aplicată dacă este necesară;
2. apoi, valoarea rezultată este pusă într-o variabilă temporară de tip T;
3. în cele din urmă, această variabilă temporară este folosită ca valoare a iniţializatorului.

De exemplu:
const int& cir = 1;
Interpretarea acestei iniţializări ar putea fi:
int temp = temp(1); //mai întâi se creează o variabilă temporară cu valoarea cerută
const int& cir = temp; //apoi se foloseşte această variabilă pentru iniţializarea lui cir

O referinţă poate fi folosită pentru a specifica un argument pentru o funcţie în aşa fel încât funcţia poate schimba
valoarea unui obiect care i-a fost trimis ca argument. De exemplu:

void increment(int& aa) {aa++;} // “aa” este argumentul de tip referinta la int al functiei
void main()
{
int x = 1;
increment(x); // se face conversia lui int x la int& x
}

Semantica trimiterii argumentului este definită ca aceea a iniţializării, astfel încât când este apelat, argumentul
formal “aa” devine un alt nume pentru x. Pentru a păstra programele uşor de înţeles, cel mai bine este să evitaţi
funcţiile care modifică argumentele. Mai bine faceţi ca funcţia să returneze o valoare sau folosiţi un pointer ca
argument. De exemplu:

int increment_v(int p) {return p+1;}


void increment_p(int* p) {(*p)++;}

Notaţia increment(x) nu dă nici un indiciu cititorului că valoarea x urmează să fie modificată, celelalte două
(increment_v şi increment_p) dau. În consecinţă, “simplele” argumente de tip referinţă ar trebui să fie folosite doar
unde numele funcţiei oferă o puternică idee că argumentul referinţă este modificat.
Referinţele pot de asemenea fi folosite pentru a defini funcţii care pot fi folosite în ambele părţi ale unei
asignări (stânga – left-hand şi dreapta – right-hand). Din nou, multe din cele mai interesante folosiri ale acestora
sunt găsite în crearea neobişnuitelor tipuri definite de utilizator. Vezi p. 99 din Bjarne Stroustrup.

S-ar putea să vă placă și