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?
Author: Community, 2012-07-19

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.

 67
Author: Sergey K.,
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