Kompilieren der folgende:Achtung: Hinweis auf lokale temporäre Objekt zurückkehr
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;
}
ergibt die folgende Warnung mit Klirren
main.cc:7:12: warning: returning reference to local temporary object [-Wreturn-stack-address]
return platform::keyboard_event();
^~~~~~~~~~~~~~~~~~~~~~~~~~
jedoch eine konstante Referenz auf etwas Rückkehr verlängert seine Lebensdauer es nicht ?
Der aktuelle Entwurf nicht für mich wird geladen, so werde ich zitieren cppreference.com statt:
Die Lebensdauer eines temporären Objekts kann durch Bindung an eine const lvalue Referenz oder auf einen R-Wert Bezug verlängert werden (seit C++ 11), siehe Referenzinitialisierung für Details.
Wie kann ich das umschreiben, um den gleichen Effekt zu haben, aber die Warnung vermeiden?
'platform :: keyboard_event()' ist r-Wert. Sie binden es mit 'const &' und geben es zurück. Aber Sie können keinen Verweis auf temp, const oder nicht zurückgeben. Es ist eine klassische Warnung "Rückkehr zur temporären Warnung". – xinaiz
Wenn Sie dem Link in "Siehe Referenzinitialisierung für Details" folgen, fährt cppreference fort, zu sagen "eine temporäre Bindung an einen Rückgabewert einer Funktion in einer return-Anweisung ist nicht erweitert" – Cubbi