编译如下:警告:当地的临时对象返回引用
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();
^~~~~~~~~~~~~~~~~~~~~~~~~~
然而,返回一个const引用的东西延长其使用寿命不就?
当前草案未加载用于我所以我会引用cppreference.com代替:
临时对象的寿命可以通过结合到一个const左值参考或到一个rvalue参考被扩展(自C++ 11以来),请参阅参考初始化以了解详细信息。
我怎样才能重新写这个有相同的效果,但避免警告?
'platform :: keyboard_event()'是r值。你用'const&'绑定它并返回它。但是你不能返回temp或const的引用。这是经典的“返回临时参考”警告。 – xinaiz
如果您按照“请参阅参考初始化中的详细信息”中的链接,cppreference继续说“在返回语句中函数的返回值的临时绑定不会被延长” – Cubbi