mi è stato mostrato il seguente esempio in videochat:Quale standard standard ci dice che l'estensione di durata temporanea ref-to-const solo "funziona una volta"?
#include <iostream>
struct foo { ~foo() { std::cout << "destroying!\n"; } };
const foo& func(const foo& a, const foo&) { return a; }
int main()
{
foo x;
const foo& y = func(foo(), x);
std::cout << "main\n";
}
destroying!
main
destroying!
Sembra dimostrare che la durata del foo
temporanea non è esteso a totalità del main
, anche se si arriva associato a un ref-to-const
in tale ambito.
Presumibilmente, quindi, l'estensione di durata solo "funziona una volta"; vale a dire, viene applicato quando gli argomenti di func
vengono inizializzati, ma non vengono trasmessi tramite binding consecutivi.
La mia interpretazione è corretta? Se è così (e se ogni singolo paragrafo è direttamente applicabile) qual è la dicitura standard che definisce questo comportamento?
Qual è il secondo argomento per 'func'? Cosa succede se si lascia (e 'x') spento? –
@KonradRudolph: È per dimostrare l'ordine di distruzione relativo all'output del testo '" main "', immagino. –