Ich habe eine Funktion geschrieben, die einen Verweis auf ein lokales Objekt zurückgibt.Funktion, die einen Verweis auf ein lokales Objekt zurückgibt
Fraction& operator*(Fraction& lhs, Fraction& rhs)
{
Fraction res(lhs.num*rhs.num,lhs.den*rhs.den);
return res;
}
Nach Funktion kehrt die res wird Objekt zerstört und Empfang Objekt Ex-Fraction-Objekt, die zu undefiniertem Verhalten weiterer Verwendung verweisen. Jeder, der diese Funktion verwenden wird, wird ein Problem haben.
Warum kann der Compiler diese Art von Situation nicht als Kompilierzeitfehler erkennen?
Im Allgemeinen kann es - g ++ etwas wie 'Warnung ausgeben: Verweis auf lokale Variable' x 'zurückgegeben [standardmäßig aktiviert]'. Dies hängt möglicherweise vom verwendeten Compiler und/oder von den verwendeten Compiler-Switches ab. –
das ist, was Warnungen sind, um alle Warnungen als Fehler zu behandeln. – yngccc
Hinweis Sie können durch konstanten Bezug zurückgeben und es wird in Ordnung sein – dchhetri