Tymczasowe przedłużenie żywotności
Sekcja standardu 12.2.5 mówi:
Tymczasowe powiązanie z parametrem odniesienia w wywołaniu funkcji (5.2.2) utrzymuje się aż do zakończenia pełnego wyrażenia zawierającego wywołanie. Tymczasowe powiązanie ze zwracaną wartością w instrukcji powrotu funkcji (6.6.3) utrzymuje się do momentu zakończenia funkcji. We wszystkich tych przypadkach tymczasowe pliki utworzone podczas oceny wyrażenia inicjującego odwołanie, z wyjątkiem tymczasowego, do którego odniesienie jest związane, są niszczone na końcu pełnego wyrażenia, w którym zostały utworzone i w odwrotnej kolejności niż zakończenie ich budowy.
Kod, który próbuję zrozumieć, to:
#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;
}
Online#1
tymczasowy obiekt jest tworzony i związany zfooRef
parametrfoo
. fooRef
jest niszczony on-line#0
. Pomyślałem więc, że tymczasowe powinno zostać tutaj zniszczone, ponieważ przedłużenie życia nie jest przechodnie.
Pytania:
Co robiuntil the function exits
oznaczać? Czy to znaczyuntill it finished executing
?
Dlaczego dostaję5
wydajność. Czy obiekt tymczasowy nadal istnieje w trybie online#2
?
Jak mogę zinterpretować standardowy cytat, aby dowiedzieć się, jak działa ten przykład?
Doceniono by krok po kroku przejście atomowe z odniesieniami do standardu. Dziękuję Ci!
P. S. Przyjęta odpowiedźtutaj powiedział również, że kod jestbroken
i nie rozumiem, dlaczego otrzymuję taki wynik programu.