Я смотрю код следующей формы:
class foo
{
public:
foo() {}
//...
};
class bar
{
public:
bar() : ref() {}
private:
const foo &ref;
};
Правильна ли инициализация ссылки с использованием временного таким образом?Я знаю, что можно инициализировать константную ссылку, которая является локальной переменной, с временной, и это продлевает время жизни временной переменной, например,
const foo &tmp = funcThatReturnsByValue(); //OK
Однако один из ответов на связанный инициализация ссылки в списке инициализации предполагает, что существует разница между «недолговечными» и «долгоживущими» ссылками, и что инициализация ref
, как указано выше, является неопределенным поведением (даже если ref
является const
ссылка).
12.2.5 в стандарте частично говорит: «Временная привязка к элементу ссылки в ctor-initializer конструктора сохраняется до выхода из конструктора».Описывает ли это ситуацию?