Maison >développement back-end >C++ >Les références C peuvent-elles être réaffectées ?
Réaffectation des références en C
En C , les références sont souvent décrites comme des liaisons immuables aux adresses mémoire. Cependant, une question récente a soulevé des doutes sur cette compréhension. Pour explorer ce sujet, examinons le programme C suivant :
#include <iostream> int main() { int i = 5, j = 9; int &ri = i; std::cout << "ri is: " << ri << '\n'; i = 10; std::cout << "ri is: " << ri << '\n'; ri = j; // Is this not reassigning the reference? std::cout << "ri is: " << ri << '\n'; return 0; }
Ce code se compile avec succès et sa sortie est :
ri is: 5 ri is: 10 ri is: 9
La question se pose : l'affectation n'est-elle pas ri = j; contredire la notion de références immuables ?
Non, ri est toujours une référence à i. Cela peut être vérifié en imprimant les adresses de ri et de i et en observant qu'elles sont les mêmes.
Ce qui s'est réellement produit, c'est que la référence ri est utilisée pour modifier la valeur de i. Attribuer une nouvelle valeur à ri serait en effet interdit, car la référence est immuable et doit toujours pointer vers le même emplacement mémoire.
A titre de comparaison, considérons le code suivant :
const int &cri = i;
Ce le code ne permettra pas une affectation à cri, car il s'agit d'une référence à une constante. Cela démontre que même si les références ne peuvent pas être réaffectées à un nouvel emplacement mémoire, elles peuvent toujours être utilisées pour modifier la valeur à l'adresse à laquelle elles font référence, à condition que cette valeur soit mutable.
En conclusion, le ri = j; l'affectation dans le programme d'origine n'est pas une réaffectation de la référence elle-même, mais plutôt une modification de la valeur à laquelle elle fait référence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!