1. ホーム
  2. c++

[解決済み] C++コンパイラの警告 - ローカル変数を返す

2022-02-18 05:03:49

質問

単純に+演算子をオーバーロードしようとしているのですが、コンパイラの警告が表示されます。

reference to local variable 'tmp' returned

以下は、オーバーロードのコードです。

const Int& Int::operator+(const Int& p) const
{
    Int tmp = value + p.value;
    return tmp;
}

以下はそのクラスです。

class Int{
    int value;
public:
    Int() {}    // default constructor
    Int(int v) : value(v) {}
    Int& operator=(const Int&);
    const Int& operator+(const Int&) const;
};

解決方法は?

ローカル変数への参照を返すことができない。の中は operator+() というローカル変数を作成しています。 tmp . この関数は、関数が終了すると同時に破棄されます。その変数への参照を返すことはできません。なぜなら、呼び出した関数が戻り値を取得した時点で、その変数はもう存在しないからです。

関数の定義を変更します。

const Int operator+(const Int&) const;

こちらも警告なしでビルドされ、問題なく動作するでしょう。