6

我不清楚临时对象的生命周期是否会通过将其绑定到 ?: 表达式中的 const 引用来延长:

class Foo {...};

Foo *someLValue = ...;

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

通过调用默认构造函数 Foo() 创建的临时对象的生命周期是否通过将其绑定到本地 const ref 来扩展,即使绑定是有条件的?或者这是否会创建一个悬空引用,因为 Foo() 的临时值将在 ?: 表达式的末尾被破坏?

4

1 回答 1

5

在此代码中,条件运算符的第二个和第三个操作数具有不同的值类别(左值和纯右值)。

这意味着条件运算符的结果是 prvalue 类型Foo,它表示从所选操作数复制初始化的临时对象。

引用直接绑定到这个临时对象,因此延长了临时对象的生命周期。

笔记:

  • 引用从不直接绑定到*someLValue,甚至也不绑定到Foo()
  • 初始化的临时Foo()对象是复制省略上下文,因此在这种情况下您可能无法观察到临时对象。
  • 临时是 non-const即使引用是 to const
于 2016-05-17T04:07:22.713 回答