La sezione 12.2.5 della norma dice:durata temporanea estensione
Una temporanea legata ad un parametro di riferimento in una chiamata di funzione (5.2.2) persiste fino al completamento della piena espressione che contiene la chiamata . Un limite temporaneo al valore restituito in una funzione restituisce l'istruzione (6.6.3) finché non si chiude la funzione. In tutti questi casi , i provvisori creati durante la valutazione dell'espressione inizializzando il riferimento, ad eccezione del temporaneo a cui è associato il riferimento , vengono distrutti alla fine dell'espressione completa in da cui sono stati creati e nel ordine inverso del completamento di loro costruzione.
Il codice cerco di capire è:
#include <iostream>
const int& foo(const int& fooRef)
{
return fooRef;
} // #0
int main (void)
{
const int& numberRef = foo(5); // #1
std::cout << numberRef; // #2
return 0;
}
On line #1
un oggetto temporaneo viene creato e tenuto a fooRef
parametro di foo
. fooRef
viene distrutto sulla linea #0
. Quindi pensavo che il temporaneo dovesse essere distrutto qui da quando l'estensione della vita non è transitiva.
Domande:
Cosa
until the function exits
significa? Significauntill it finished executing
?Perché ottengo un output
5
. Esiste ancora un oggetto temporaneo sulla riga#2
?Come posso interpretare la citazione standard per capire come funziona questo esempio?
Step-by-step atomico con riferimenti allo standard sarebbe molto apprezzato. Grazie!
P. S. Una risposta accettata here ha anche detto che il codice è broken
e non ottengo, perché ottengo tale output del programma.