Увеличивается ли время жизни временного объекта C ++, созданного в выражении?:, Путем привязки его к локальной константной ссылке?

Мне неясно, будет ли увеличено время жизни временного объекта путем привязки его к константной ссылке в выражении?::

class Foo {...};

Foo *someLValue = ...;

const Foo& = someLValue ? *someLValue : Foo();

Увеличивается ли время жизни временного объекта, созданного вызовом конструктора по умолчанию Foo (), путем привязки его к локальной const ref, даже если привязка является условной? Или это создает висящую ссылку, потому что временное значение Foo () будет уничтожено в конце выражения?:?


person Palo    schedule 17.05.2016    source источник


Ответы (1)


В этом коде второй и третий операнды условного оператора имеют разные категории значений (lvalue и prvalue).

Это означает, что результатом условного оператора является prvalue типа Foo, которое обозначает временный объект, инициализируемый копией из выбранного операнда.

Ссылка привязывается непосредственно к этому временному объекту, и поэтому время жизни временного увеличивается.

Примечания:

  • Ссылка никогда не привязывается напрямую ни к *someLValue, ни даже к Foo().
  • Временный объект, инициализируемый из Foo(), является контекстом исключения копирования, поэтому в этом случае вы не сможете наблюдать временное.
  • Временное значение не const, хотя ссылка на const.
person M.M    schedule 17.05.2016