ローカルオブジェクトへの参照を返す関数を記述しました。ローカルオブジェクトへの参照を返す関数
Fraction& operator*(Fraction& lhs, Fraction& rhs)
{
Fraction res(lhs.num*rhs.num,lhs.den*rhs.den);
return res;
}
関数の後にRESが破棄され、受信したオブジェクトは、それを使用して、未定義の動作につながる元フラクションオブジェクトをポイントするオブジェクトを返します。 この機能を使用する人は誰でも問題に直面します。
なぜコンパイラは、コンパイル時にエラーとしてこのような状況を検出することができないのですか?
一般的にそれができる - '警告のようなもの印刷し++ G:ローカル変数への参照「X」' [デフォルトで有効に]返送します。使用しているコンパイラや使用したコンパイラスイッチに依存することがあります。 –
これは何の警告であるか、すべての警告をエラーとして処理する時間です。 – yngccc
定数参照で返すことができますし、それはうまくいくでしょう – dchhetri