Ответ 1
Это функция С++. Код действителен и делает именно то, что он делает.
Обычно временный объект длится только до конца полного выражения, в котором он появляется. Тем не менее, С++ преднамеренно указывает, что привязка временного объекта к ссылке на const в стеке удлиняет время жизни временного ресурса самой ссылки и, таким образом, позволяет избежать того, что в противном случае было бы общей ошибкой оборванных ссылок. В приведенном выше примере временное значение, возвращаемое foo()
, сохраняется до закрытия фигурной скобки.
P.S: Это относится только к ссылкам на стек. Он не работает для ссылок, являющихся членами объектов.
Полный текст: GotW # 88: Кандидат на "Самый важный const" Херба Саттера.