Références
En C pour faire un swap, on écrit
void swap(int* p, int* q) {
int tmp = *p;
*p = *q;
*q = tmp;
}
int x, y;
swap(&x, &y)
Soucis avec les pointeurs
Le soucis des pointeurs c'est :
- c'est moche
*p + *q
au lieu du naturelx + y
; - on peut modifier à la fois
p
et*p
donc trop de bugs ; - on peut avoir un pointeur null ou qui pointe vers n'importe quoi
- C'est mieux de directement manipuler des objets
Point p
et non pasPoint* p
car ça appelle le destructeur quand la mémoire est libérée
Pour cela, il propose les références.
Définition d'une référence
Une référence est un nouveau nom pour désigner un objet existant.
void swap(int& i, int& j)
{
int tmp = i;
i = j;
j = tmp;
}
int x, y;
swap(x, y);
L'implémentation derrière la scène est la même que les pointeurs. Mais c'est une vision technique. On peut vraiment voir ça comme un nouveau nom.
Exercice
int x = 4;
int& y = x;
y = 5;
Que vaut x à la fin ?
Il vaut 5. Car en vrai, c'est la même chose que :
int x = 4;
int py = &x;
*py = 5;
Voir aussi
[https://isocpp.org/wiki/faq/references]