AFAIK, im folgenden Code die Lebensdauer der Referenz ro1
wird bis zum Ende des Bereichs erweitert (Funktion g()
):Verlängert eine Referenz auch ihre Lebensdauer?
class Some {
// Implementation here
};
Some f() {
return Some(/* constructor parameters here*/);
}
void g() {
Some&& ro1 = f();
// ro1 lives till the end of this function
}
Wie über diese Referenz Rückkehr? Bleibt das Objekt noch in g1()
oder wird es beim Ausgang von h()
zerstört?
Some&& h() {
Some&& ro1 = f();
// Code skipped here
return std::forward<Some>(ro1);
}
void g1() {
Some&& ro2 = h();
// Is ro2 still refering to a valid object?
}
Keine Lebensdauerverlängerung für Ihr zweites Snippet. – Jarod42
** Wenn ** es 'std :: forward' war, dann kann eine Move-Konstruktion erwartet werden. Aber in Ihrem zweiten Ausschnitt, ** seit ** ist es ein 'std :: forward ', so vermeidet es jede Konstruktion und hinterlässt eine freie Referenz –
Nein, wenn 'g' zurückkehrt, wird das lokale temporäre zerstört und Sie bleiben mit a hängende Referenz. Auch ich dachte, Referenz Erweiterung war nur für const ref nicht rvalue ref - ich etwas fehlt, hat sich das in C++ 1z geändert? –