2016-04-13 4 views
1

C++ Primer 2.3.1 sagt: Einmal initialisiert, bleibt eine Referenz an ihr ursprüngliches Objekt gebunden. Es gibt keine Möglichkeit, eine Referenz neu zu binden, um auf ein anderes Objekt zu verweisen. Aber mein Code funktioniert gut: Warum, wenn ich die Referenz von C++ wiederverbinde, meldet der Compiler keinen Fehler

#include <iostream> 
int main() 
{ 
    int a = 1, b = 2; 
    int &r = a; 
    r = b; 
    std::cout << r << std::endl; 
    return 0; 
} 

das laufende Ergebnis ist:

+3

Drucken Sie 'a' zusammen mit' r'. Es gibt kein * Rebinding *, Sie weisen einfach 'a' über die Referenz zu. – Praetorian

+0

Sobald eine Referenz erstellt wurde, wird die Referenz, auf die sie verweist, (virtuell) in jeder Hinsicht zu einem Synonym. Sprich r = b ist dasselbe wie a = b zu sagen. – xaxxon

Antwort

6

Sie nicht rebind. Stattdessen haben Sie den Wert ba zugewiesen.

prüfen diese sich durch die Adressen Druck vor und nach dieser Zuordnung:

std::cout << "a: " << &a << std::endl; 
std::cout << "b: " << &b << std::endl; 
std::cout << "r: " << &r << std::endl; 
Verwandte Themen