2

演算子のオーバーロードに関するドキュメントを読んでいました:http: //courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.htmlしかし、(実際のコンテキストで)以下のコードを実行すると、常に取得されます結果がローカル変数であるという警告。ローカル変数を返すべきではないというのは理にかなっていますが、問題なく動作しているようです。次のようなコードで警告をなくす方法はありますか?

const Matrix & Matrix::operator+(const Matrix &other) const
{
  Matrix result(*this);
  result += other;
  return result;
}

このようなcaltechのWebサイトの例は、リンクの下部にあります

4

3 に答える 3

1

コードで、関数の外部で破棄されるオブジェクトへの参照を返そうとします。オブジェクトを返す必要があります(オブジェクトへの参照ではありません)。

于 2013-01-23T05:28:09.303 に答える
1

Matrix警告を削除するには、 by 値を返す必要があります。

意味的には、呼び出されたオブジェクトを変更する必要がないため、フリー関数として定義することも理想的です。

于 2013-01-23T04:47:49.393 に答える
1

operator+()操作の結果を保持する新しい (ローカルに宣言された) インスタンスであるため、参照型を返すべきではありません。

Matrix operator+(Matrix lhs, const Matrix &rhs)
{
  return lhs += rhs;
}
于 2013-01-23T05:00:32.277 に答える