2016-04-16 7 views
0
int main() 
{ 
    int a=45; 
    int& re=a; 
    cout << &a << endl; 
    cout << &re << endl; 
    return 0; 
} 

Output : 
    0x61ff18 
    0x61ff18 

Wenn ich die Adresse der beiden Variablen die gleiche, Ist es bedeutet Referenzvariable nimmt nicht Speicher im Stapel?Nimmt die Referenzvariable Speicher im Stack auf?

+0

schwer zu sagen, weil die Existenz von Stack selbst ist die Implementierung definiert. – user3528438

+0

siehe [dies] (http://stackoverflow.com/questions/8846494/do-references-take-memory-in-c) –

+0

Es könnte weg optimiert worden sein (obwohl im Allgemeinen ja es Speicher braucht) – DarthRubik

Antwort

2

Der address-of-Operator der Referenz in C++ gibt die Adresse des referenzierten Objekts an - nicht die Adresse der Referenzvariablen selbst. Nach C++ Spezifikation.

Daher sehen Sie den gleichen Wert.

+0

Also wie kann ich die Adresse der Referenzvariable selbst ausdrucken? – shuboy2014

+0

Das ist komisch .... – DarthRubik

+0

@ shuboy2014 Sie können nicht. Die Sprache bietet dafür keine Möglichkeit. – rightfold

2

& nimmt die Adresse des referenzierten Objekts, nicht der Referenz selbst, daher ist der Ausgang für &a und &re identisch. In typischen Implementierungen benötigen Referenzen selbst Speicher, sofern sie nicht optimiert sind. Konsultieren Sie die Dokumentation Ihrer Implementierung und die Assembly-Ausgabe (-S Flag für GCC und clang). Die Sprachspezifikation gibt keine Garantien.

Verwandte Themen