Napisałem funkcję, która zwraca odniesienie do lokalnego obiektu.Funkcja, która zwraca odniesienie do lokalnego obiektu
Fraction& operator*(Fraction& lhs, Fraction& rhs)
{
Fraction res(lhs.num*rhs.num,lhs.den*rhs.den);
return res;
}
Po funkcji powrotu res obiekt zostanie zniszczony i odbierania obiekt będzie wskazywać na przedmiot Przykład frakcji prowadzi do nieokreślonego zachowania jego używania. Każdy, kto zamierza skorzystać z tej funkcji, napotka problem.
Dlaczego kompilator nie może wykryć takiej sytuacji jako błędu czasu kompilacji?
Ogólnie może - g ++ wypisuje coś w rodzaju 'ostrzeżenie: odwołanie do zmiennej lokalnej 'x' zwrócone [domyślnie włączone]'. Może to zależeć od używanego kompilatora i/lub używanych przełączników kompilatora. –
o to właśnie są ostrzeżenia, czas potraktować wszystkie ostrzeżenia jako błąd. – yngccc
Uwaga: możesz powrócić przez stałe odniesienie i będzie dobrze – dchhetri