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

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

class Foo {...};

Foo *someLValue = ...;

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

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

6

Решение

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

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

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

Заметки:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector