Eventuali duplicati:
Returning the address of local or temporary variable
Can a local variable’s memory be accessed outside its scope?ritorno riferimenti a variabili locali
Pur sapendo che cosa accade a causa dei seguenti tagli sarebbe utile per capire come sta accadendo . Seguono quattro domande.
Data:
int& foo()
{
int i = 1;
return i;
}
E sapendo che in seguito un riferimento al locale chiamato i è de-reference in una temperatura che viene assegnato a intVal e locale i scompare alla fine del foo()
int intVal = foo();
Prima questione - nel seguito, il lato destro dell'espressione è lo stesso come sopra così è questo è un caso in cui il compilatore vede il lato sinistro e, in base al contesto, sa di non de-referenziare il riferimento restituito, e invece di creare un nuovo riferimento viene inizializzato con esso?
Seconda domanda - e questo da solo fa sì che il locale i si blocchi mentre intRef è in ambito?
int& intRef = foo();
Terza questione - muggito intPtr ottiene l'indirizzo di locale i. Quindi, il compilatore usa il contesto dell'assegnazione e decide di non de-referenziare per ottenere un valore prima di prendere l'indirizzo del riferimento (piuttosto che assumere l'indirizzo di un valore temporaneo contenente il valore de-referenziato)?
quarta questione - fa locale i bastone intorno mentre intPtr è portata?
int* intPtr = &foo();
Non ha senso sapere cosa succede qui. FWIW, * non * si attacca intorno, e nel primo non rimane abbastanza a lungo perché possa accadere qualsiasi cosa. –
Non c'è "un temp"! –
possibile duplicato: [Ritorno dell'indirizzo della variabile locale o temporanea] (http://stackoverflow.com/q/2744264/187543) – cpx