Zastanawiam się, dlaczego zwrócenie const reference
obiektu lokalnego jest nielegalne, a zwrócenie numeru local object
jest zgodne z prawem, o ile zostało przypisane do const reference
?return const reference a tymczasowy obiekt
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: Chodzi mi o to, że jeśli przypisanie const ref do zwracanej zmiennej lokalnej jest legalne, to nie powinno przypisanie const ref do zwracanego const ref zmiennej lokalnej być legalne, jak również?
@Ed Heal Tak, to jest dobrze zdefiniowane w C++, że odwołanie do stałej lokalnej wydłuży czas życia tymczasowego, z którym jest związany. –
@EdHeal tak, to jest legalne. W standardzie istnieje specjalny przypadek, który utrzyma obiekt lokalny przy życiu, o ile istnieje odniesienie do niego w bieżącym zakresie. –