2013-09-16 15 views
7

co ma nastąpić w następujących przypadkach:Podanie wartości zwracanej przez funkcję jako odniesienie

int functionA() { 
    return 25; 
} 

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

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

Przy sporządzaniu tego przykładu, wyprowadza poprawną wartość 25. Jak to działa? Czy powinieneś usunąć zwróconą wartość na stosie (usuniętą ze stosu), gdy używasz tylko odniesienia do niej, czy zachowanie jest niezdefiniowane?

+1

patrz standard C++ 11 12,2/4,5 dla efektu stałych odniesień obiektów tymczasowych – nijansen

Odpowiedz

8

ten „dzieł” z powodu const int& ref - gdy odwołanie jest const (gwarancje, że nie chcą go zmienić), kompilator będzie produkować tymczasowy obiekt w kodzie wywołującym (start w Twoim przypadku), a następnie podać odniesienie do tego.

Jeśli usuniesz const, nie uda się skompilować, ponieważ wynik functionA nie może zostać przekształcony w referencję.

8

Nie ma „wartość powrotu na stosie” (nie mówiąc już o „stos”): functionA zwracającą intwedług wartości, więc wyrażenie functionA() jest jedynie tymczasowa wartość typu int. Ta wartość wiąże się ze stałą wartością odniesienia w functionB, a ponieważ jej żywotność jest równa pełnej ekspresji, wszystko jest w porządku.

Powiązane problemy