Воз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» Херба Саттера .

  • Почему C # не поддерживает возврат ссылок?
  • Является ли практика возвращения ссылочной переменной C ++ злом?
  • Постоянный ресурс ссылки C ++ (контейнерный адаптер)
  • что такое возвращаемый тип оператора присваивания?
  • Возможна ли пустая ссылка?
  • Разница между константой const и нормальным параметром
  • Как получить доступ к переменной из другого скрипта в другом игровом объекте через GetComponent?
  • О привязке ссылки const к под-объекту временного
  • Установить пользовательский путь к ссылочным DLL?
  • Разница между std :: reference_wrapper и простым указателем?
  • Java, pass-by-value, ссылочные переменные
  • Давайте будем гением компьютера.