Ich frage mich, warum die Rückgabe const reference
eines lokalen Objekts ist illegal, während die Rückgabe einer local object
ist legal, solange Sie es an eine const reference
zuweisen?Rückgabe const Referenz vs temporäres Objekt
vector<int> f_legal() {
vector<int> tempVec;
tempVec.push_back(1);
return tempVec;
}
const vector<int>& f_illegal() {
vector<int> tempVec;
tempVec.push_back(1);
return tempVec;
}
void g() {
const vector<int>& v1 = f_legal(); // legal
const vector<int>& v2 = f_illegal(); // illegal
}
Edit: Mein Punkt ist, dass, wenn ein const ref zu einer zurück lokalen Variablen zugewiesen legal ist, dann sollte kein const ref auf einen zurück const ref einer lokalen Variablen zuweisen als auch legal sein?
@Ed Heal Ja, es ist in C++ klar definiert, dass eine lokale const-Referenz die Lebensdauer eines temporären Objekts, an das es gebunden ist, verlängert. –
@EdHeal Ja, es ist legal. Es gibt einen speziellen Fall im Standard, der ein lokales Objekt am Leben erhält, solange es im aktuellen Bereich eine konstante Referenz darauf gibt. –