C++
Les références
Recherche…
Définir une référence
Les références se comportent de la même manière, mais pas complètement comme les pointeurs const. Une référence est définie en suffixant une esperluette &
à un nom de type.
int i = 10;
int &refi = i;
Ici, refi
est une référence liée à i
.
Les références abstraite la sémantique des pointeurs, agissant comme un alias à l'objet sous-jacent:
refi = 20; // i = 20;
Vous pouvez également définir plusieurs références dans une même définition:
int i = 10, j = 20;
int &refi = i, &refj = j;
// Common pitfall :
// int& refi = i, k = j;
// refi will be of type int&.
// though, k will be of type int, not int&!
Les références doivent être initialisées correctement au moment de la définition et ne peuvent plus être modifiées par la suite. Le morceau de code suivant provoque une erreur de compilation:
int &i; // error: declaration of reference variable 'i' requires an initializer
Vous ne pouvez pas non plus lier directement une référence à nullptr
, contrairement aux pointeurs:
int *const ptri = nullptr;
int &refi = nullptr; // error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'nullptr_t'
Les références C ++ sont des alias de variables existantes
Une référence en C ++ n'est qu'un Alias
ou un autre nom d'une variable. Tout comme la plupart d'entre nous peuvent être référés en utilisant notre nom de passeport et notre surnom.
Les références n'existent pas littéralement et elles n'occupent aucune mémoire. Si nous imprimons l'adresse de la variable de référence, elle affichera la même adresse que celle de la variable à laquelle elle fait référence.
int main() {
int i = 10;
int &j = i;
cout<<&i<<endl;
cout<<&b<<endl;
return 0;
}
Dans l'exemple ci-dessus, les deux cout
impriment la même adresse. La situation sera la même si on prend une variable comme référence dans une fonction
void func (int &fParam ) {
cout<<"Address inside function => "<<fParam<<endl;
}
int main() {
int i = 10;
cout<<"Address inside Main => "<<&i<<endl;
func(i);
return 0;
}
Dans cet exemple également, les deux cout
imprimeront la même adresse.
Comme nous le savons maintenant, les C++ References
sont que des alias, et pour qu'un alias soit créé, nous avons besoin de quelque chose auquel l'alias peut faire référence.
C'est la raison précise pour laquelle cette déclaration lance une erreur de compilation
int &i;
Parce que l'alias ne fait référence à rien.