Maison > développement back-end > C++ > Les références C peuvent-elles être réaffectées ?

Les références C peuvent-elles être réaffectées ?

Susan Sarandon
Libérer: 2024-12-02 12:44:14
original
841 Les gens l'ont consulté

Can C   References Be Reassigned?

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;
}
Copier après la connexion

Ce code se compile avec succès et sa sortie est :

ri is: 5
ri is: 10
ri is: 9
Copier après la connexion

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;
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal