Mögliche Duplizieren:
Returning the address of local or temporary variable
Can a local variable’s memory be accessed outside its scope?Rückkehr Verweise auf lokale Variable
Auch zu wissen, was passiert, als ein Ergebnis der folgenden snips es wäre hilfreich, zu verstehen, wie es geschieht, . Vier Fragen folgen.
Gegeben:
int& foo()
{
int i = 1;
return i;
}
Und zu wissen, dass in den folgenden Verweis auf die lokalen namens i wird in eine temporäre dereferenziert, die INTVAL zugeordnet ist und lokale i verschwindet am Ende foo()
int intVal = foo();
Erste Frage - im folgenden wird die rechte Seite des Ausdrucks ist das gleiche wie oben ist, so Dies ist ein Fall, in dem der Compiler die linke Seite sieht und basierend auf dem Kontext weiß, dass die zurückgegebene Referenz nicht de-referenziert und stattdessen eine neue Referenz erstellt wird, die damit initialisiert wird?
Zweite Frage - und das allein macht die lokale i bleiben Sie herum, während intRef im Geltungsbereich ist?
int& intRef = foo();
Dritte Frage - Balg intPtr bekommt Adresse lokalen i. Also, verwendet der Compiler den Kontext der Zuweisung und entscheidet sich, nicht zu de-referenzieren, um einen Wert zu erhalten, bevor die Adresse der Referenz genommen wird (anstatt die Adresse einer Temperatur zu nehmen, die den Wert enthält, auf den verwiesen wird)?
Vierte Frage - nicht lokale i bleiben, um während intPtr in Rahmen ist?
int* intPtr = &foo();
Es ist sinnlos zu wissen, was hier passiert. FWIW, es hält sich nie fest, und in der ersten bleibt es nicht lange genug, um etwas passieren zu lassen. –
Es gibt keine "a temp"! –
möglich duplizieren: [Rückgabe der lokalen oder temporären Variablenadresse] (http://stackoverflow.com/q/2744264/187543) – cpx