是否在?:expression中创建的C ++临时对象的生命周期是通过将其绑定到本地const引用来扩展的?

时间:2016-05-17 03:57:30

标签: c++ reference temporary-objects const-reference

我不清楚临时对象的生命周期是通过将它绑定到?:表达式中的const引用来扩展的:

class Foo {...};

Foo *someLValue = ...;

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

注意:

  • 引用永远不会直接绑定到*someLValue,甚至也不会绑定到Foo()
  • Foo()初始化的临时文件是一个复制省略上下文,因此在这种情况下您可能无法观察到临时文件。
  • 临时不是const,即使引用是const