編譯如下:警告:當地的臨時對象返回引用
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