Мне не ясно, будет ли продлен срок службы временного объекта путем привязки его к константной ссылке в выражении?:
class Foo {...};
Foo *someLValue = ...;
const Foo& = someLValue ? *someLValue : Foo();
Время жизни созданного временного объекта путем вызова конструктора по умолчанию Foo () увеличивается путем привязки его к локальному const ref, даже если это условное связывание? Или это создает висячую ссылку, потому что временное значение Foo () будет уничтожено в конце выражения?:?
В этом коде второй и третий операнд условного оператора имеют разные категории значений (lvalue и prvalue).
Это означает, что результатом условного оператора является значение типа Foo
, который обозначает временный объект, инициализированный копией из выбранного операнда.
Ссылка привязывается непосредственно к этому временному объекту, поэтому срок жизни временного объекта увеличивается.
Заметки:
*someLValue
и даже не Foo()
,Foo()
является копией elision context, поэтому вы не сможете наблюдать временное в этом случае.const
хотя ссылка на const
,Других решений пока нет …