2013-05-10 16 views
5

Ich gehe durch Referenz-Konzepte in C++ und ich bin wenig verwirrt von dieser Anweisung in C++ Complete Reference.Referenz auf eine Referenz in C++

Sie können nicht eine andere Referenz

So verweisen, was in diesem Fall passiert:

int var = 10; 
    int& ref = var; 
    int& r_ref = ref; 
    r_ref++; 
    cout << "var:" << var << "ref:" << ref << "r_ref:" << r_ref << endl; 

Der Ausgang ich bin immer ist:

var:11 ref:11 r_ref:11 
+3

Der Code, den Sie geschrieben haben, verweist nicht auf eine andere Referenz (z. B. 'int &&'). Sie referenzieren eine Variable zweimal.Also, der Code ist in Ordnung. – deepmax

Antwort

10

Es ist leicht verwechselbar WORTLAUT . Was sie meinen, ist, dass Sie keinen int& & Typ haben können (beachten Sie, dass es so etwas wie eine int&& gibt, aber das ist eine andere Art von Referenz).

In Ihrem Code bezieht sich der Verweis ref auf das Objekt, das mit var gekennzeichnet ist. Die Namen ref und var können synonym verwendet werden, um auf dasselbe Objekt zu verweisen. Wenn Sie also int& r_ref = ref; tun, machen Sie keinen Verweis auf eine Referenz, aber Sie machen noch einmal einen Verweis auf dasselbe Objekt.

+0

Wenn der Verweis auf eine Referenz als int & & betrachtet wird, dann ist es in Ordnung. – Daemon

+0

Noch eine Sache ** wir können die Adresse einer Referenzvariable ** nicht erhalten. Aber da ref sich hier auf var bezieht, kann ich & ref. Kannst du das bitte erklären? – Daemon

+1

@Guarav Ja, wenn Sie '& ref' verwenden, nehmen Sie tatsächlich die Adresse des Objekts, auf das es sich bezieht. Sie können nicht die Adresse der Referenz selbst nehmen. In der Tat ist es nicht spezifiziert, ob eine Referenz selbst im Speicher existiert. –

6

Also, was in diesem Fall passiert:

Was passiert ist, dass Sie eine weitere Referenz r_ref auf das Objekt durch ref verwiesen schaffen, die var ist. Sie erhalten also zwei Referenzen auf var: ref und r_ref.

Beachten Sie, dass eine Referenz ist nur ein alias: nachdem es an ein Objekt gebunden ist (und es muss auf ein Objekt bei der Initialisierung gebunden werden, und es kann später nicht mehr neu gebunden werden), Alles, was Sie an der Referenz tun, ist getan auf das Objekt, das referenziert wird, als ob die Referenz nur ein alternativer Name wäre.

Was diese Aussage bedeutet:

Sie können nicht eine andere Referenz

Referenz

Ist, dass Sie nicht eine Referenz behandeln kann sich als eine Einheit, die weiter aliased werden können: Referenzen sind Aliasnamen für Objekte und was auch immer Sie an einer Referenz (einschließlich Referenzgrenzen!) tun, wird für das Objekt ausgeführt, auf das verwiesen wird.

0

int var = 10; deklariert eine Variable var. Jetzt, wenn Sie schreiben definiert einen Verweis auf var. Sie können ref als nur ein Alias ​​für var betrachten. Wo auch immer Sie ref verwenden, ist es, als ob Sie direkt var verwenden würden.

Also das ist der Grund, warum nur einen anderen Verweis auf var definiert.