我不清楚临时对象的生命周期是通过将它绑定到?:表达式中的const引用来扩展的:
class Foo {...};
Foo *someLValue = ...;
const Foo& = someLValue ? *someLValue : Foo();
通过将默认构造函数Foo()通过将其绑定到本地const ref来扩展创建临时文件的生命周期,即使绑定是有条件的吗?或者这是否会创建一个悬空引用,因为Foo()的临时值将在?:表达式的末尾被销毁?
答案 0 :(得分:5)
在此代码中,条件运算符的第二个和第三个操作数具有不同的值类别(左值和右值)。
这意味着条件运算符的结果是类型为Foo
的prvalue,它表示从所选操作数复制初始化的临时对象。
引用直接绑定到此临时对象,因此延长了临时生命周期。
注意:
*someLValue
,甚至也不会绑定到Foo()
。Foo()
初始化的临时文件是一个复制省略上下文,因此在这种情况下您可能无法观察到临时文件。const
,即使引用是const
。