[解決済み] 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;
こちらも警告なしでビルドされ、問題なく動作するでしょう。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】'cout'は型名ではない
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません