Betrachten wir eine Funktion haben, die von Wert zurückgibt:Verweis auf r-Wert (Adresse von r-Wert)
int func() {
int x = 10; // create local variable x with value of 5
return x; // create temporary copy of x which is returned, local variable x is destroyed
}
int main()
{
int y = func(); // temporary copy of x is copied to y, when it hits`;` the temporary object is destroyed
return 0;
}
mich korrigieren, wenn ich in etwas falsch bin, was ich oben in den Kommentaren gesagt.
Jetzt können wir die Lebensdauer eines temporären Objekts verlängern, indem wir uns konstant darauf beziehen.
int main()
{
const int & y = func(); // now the temporary object (R-value) is not destroyed when it hits `;` thus the life time is lenghtened.
return 0;
}
Die Frage ist: Da ich einen konstanten Verweis auf temporäres Objekt geschaffen, die zerstört werden sollen, bedeutet es, dass cout << &y << endl
die Adresse dieses temporären Objekts gedruckt wird, da Referenz nur „alias“? Auch wo sind diese temporären Objekte (R-Werte) gespeichert im Speicher (ich verwendete primitiven Typ int, aber es könnte Klasse sein)?
Wo Provisorien gespeichert sind, können Sie nichts wissen. Das ist Implementierung definiert. –
"wo sind diese temporären Objekte (R-Werte) gespeichert?" Warum kümmert es dich überhaupt? – DimChtz
@JesperJuhl Nun, dann die Adresse, die 'cout << & y << endl;' ist nicht die Adresse dieses temporären Objekts? Was stellt diese Adresse dann dar? – kvway