Zwracanie obiektu tymczasowego i powiązanie z referencją const [duplikat]
Możliwy duplikat:
czy const reference przedłuża żywotność tymczasowego?
Mój kompilator nie narzeka na przypisanie temporary do const reference:
string foo() {
return string("123");
};
int main() {
const string& val = foo();
printf("%s\n", val.c_str());
return 0;
}
Dlaczego? Myślałem, że łańcuch zwracany z foo
jest tymczasowy i val może wskazywać na obiekt, który zakończył życie. Czy standard C++ pozwala na to i wydłuża żywotność zwracanego obiektu? 1 answers
Jest to funkcja C++. Kod jest poprawny i robi dokładnie to, co wydaje się robić.
Zwykle obiekt tymczasowy trwa tylko do końca pełnego wyrażenia, w którym się pojawia. Jednak C++ celowo określa, że powiązanie tymczasowego obiektu z odniesieniem do const na stosie wydłuża czas życia tymczasowego do czasu życia samego odniesienia, a tym samym unika tego, co w przeciwnym razie byłoby powszechnym błędem zwisającym. W powyższym przykładzie tymczasowe / align = "left" /
P. S: dotyczy to tylko odwołań opartych na stosie. Nie działa w przypadku odniesień będących członkami obiektów.
Pełny tekst: GotW # 88: kandydat do" najważniejszego const " przez Herb Sutter.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-14 20:17:08