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
Susan Sarandonoriginal
2024-12-02 12:44:14778parcourir

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;
}

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!

Déclaration:
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