Возrotation временного объекта и привязка к константной ссылке

Возможный дубликат:
Содержит ли ссылка на константу срок службы временного?

Мой компилятор не жалуется на назначение временной ссылки на const:

string foo() { return string("123"); }; int main() { const string& val = foo(); printf("%s\n", val.c_str()); return 0; } 

Зачем? Я думал, что строка, возвращаемая из foo является временной, а val может указывать на объект, срок жизни которого завершен. Предоставляет ли это стандарт C ++ и продлевает срок службы возвращаемого объекта?

Это функция C ++. Код действителен и делает то, что он, как представляется, делает.

Обычно временный объект длится только до конца полного выражения, в котором он появляется. Тем не менее, C ++ преднамеренно указывает, что привязка временного объекта к ссылке на const в стеке удлиняет время жизни временного ресурса самой ссылки и, таким образом, позволяет избежать того, что в противном случае было бы общей ошибкой оборванных ссылок. В приведенном выше примере временное значение, возвращаемое foo() сохраняется до закрывающей фигурной скобки.

PS: Это относится только к ссылкам на стек. Он не работает для ссылок, являющихся членами объектов.

Полный текст: GotW # 88: Кандидат на «Самый важный const» Херба Саттера .

  • Разница между константой const и нормальным параметром
  • Есть ли getchas с использованием varargs со ссылочными параметрами
  • Одна ошибка VS2010? Разрешить привязку не-const ссылки на rvalue БЕЗ ДАЖЕ предупреждение?
  • Установить пользовательский путь к ссылочным DLL?
  • Java: разница между сильным / мягким / слабым / фантомным ссылкой
  • Как обратиться к документации Microsoft.Office.Interop.Excel?
  • что такое возвращаемый тип оператора присваивания?
  • Json и Java - Циркулярная ссылка
  • Возможна ли пустая ссылка?
  • Почему C # не поддерживает возврат ссылок?
  • Тип возврата '?:' (Тернарный условный оператор)
  • Давайте будем гением компьютера.