Können Referenzen in C neu zugewiesen werden?
In C werden Referenzen oft als unveränderliche Einheiten angepriesen, die ein für alle Mal initialisiert werden müssen. Ein aktueller Codeausschnitt hat jedoch Fragen zu diesem Prinzip aufgeworfen.
Codeausschnitt:
int i = 5, j = 9; int &ri = i; cout << "ri is : " << ri << "\n"; i = 10; cout << "ri is : " << ri << "\n"; ri = j; cout << "ri is : " << ri << "\n";
Beobachtungen:
Frage:
Ordnet dieser Code die Referenz ri wirklich neu zu oder passiert etwas anderes?
Antwort:
Nein, ri ist immer noch eine Anspielung auf i. Die scheinbare Neuzuweisung ist tatsächlich eine Modifikation von i durch die Referenz ri.
Erklärung:
Wenn eine Referenz deklariert wird (z. B. int &ri = i), wird sie gebunden mit dem Objekt (in diesem Fall i) verbunden und bleibt während des gesamten Programms damit verknüpft. Der Code ri = j weist ri nicht neu zu, sondern ändert vielmehr den Wert von i durch die Referenz ri.
Um dies zu beweisen, kann man die Adressen von ri und i mit &ri und &i ausdrucken, was zeigen würde, dass sie bestehen bleiben das gleiche. Wenn ri außerdem j neu zugewiesen würde, wäre es nicht mehr möglich, i durch ri zu ändern, was im angegebenen Code nicht der Fall ist.
Schlussfolgerung:
Während Verweise im Codeausschnitt scheinbar neu zuweisbar sind, ist dies nicht der Fall. Stattdessen verändern sie indirekt das Objekt, auf das sie verweisen. Konstante Referenzen (z. B. const int &cri = i) verhindern solche Änderungen und erzwingen echte Unveränderlichkeit.
Das obige ist der detaillierte Inhalt vonKönnen C-Referenzen neu zugewiesen werden oder passiert etwas anderes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!