次のコンパイル:何かへのconst参照を返す、警告:ローカルの一時的なオブジェクトへの参照を返す
namespace platform {
struct event {};
struct keyboard_event : public event {};
const platform::event& wait_event()
{
return platform::keyboard_event();
}
}
int main(int argc, const char* argv[])
{
const platform::event& event = platform::wait_event();
return 0;
}
が打ち鳴らすと、次の警告を生成する
main.cc:7:12: warning: returning reference to local temporary object [-Wreturn-stack-address]
return platform::keyboard_event();
^~~~~~~~~~~~~~~~~~~~~~~~~~
しかし、それはその寿命をしない拡張します?現在のドラフトは私のためにロードされていない
ので、私が代わりにcppreference.comを引用します:constの左辺値参照または右辺値参照に結合することによって延長することができる
一時オブジェクトの寿命を(C++ 11以降)、詳細はリファレンスの初期化を参照してください。
どのように私はこれを書き直しても同じ効果を得ることができますが、警告は避けてください。
'platform :: keyboard_event()'はr値です。 'const&'でバインドして返します。しかし、temp、const、またはnotへの参照を返すことはできません。これは古典的な "一時的な参照を返す"警告です。 – xinaiz
"参照の初期化を参照してください"のリンクをたどった場合、cppreferenceは "return文の関数の戻り値に一時的にバインドされていません" – Cubbi