2013-09-16 23 views
7

quello che dovrebbe accadere nel caso seguente:Passando valore di ritorno di una funzione come riferimento

int functionA() { 
    return 25; 
} 

void functionB(const int& ref) { 
    cout << ref << endl; 
} 

void start() { 
    functionB(functionA()); 
} 

Quando si compila questo esempio, si emette il valore corretto 25. Come funziona? Non dovrebbe essere cancellato il valore di riferimento referenziato nello stack (rimosso dallo stack) quando si usa solo un riferimento ad esso, o il comportamento è indefinito?

+1

vedere C++ 11 standard 12.2/4,5 per l'effetto di riferimenti costanti di oggetti temporanei – nijansen

risposta

8

Questo "opere" a causa della const int& ref - quando un riferimento è const (garanzie che non si vuole cambiare), il compilatore produrrà un oggetto temporaneo nel codice chiamante (start nel tuo caso), e poi passare il riferimento a quello.

Se si rimuove const non verrà compilato poiché il risultato di functionA non può essere trasformato in un riferimento.

8

Non v'è alcun "valore di ritorno sullo stack" (per non parlare di un "stack"): functionA restituisce un intper valore, quindi l'espressione functionA() è semplicemente un valore temporaneo di tipo int. Questo valore si lega al riferimento costante in functionB e, poiché la sua durata è quella dell'espressione completa, è tutto a posto.

Problemi correlati