[英]Is the lifetime of a C++ temporary object created in ?: expression extended by binding it to a local const reference?
我不清楚临时对象的生命周期是通过将它绑定到?:表达式中的const引用来扩展的:
class Foo {...};
Foo *someLValue = ...;
const Foo& = someLValue ? *someLValue : Foo();
通过将默认构造函数Foo()通过绑定到本地const ref来扩展创建临时文件的生命周期,即使绑定是有条件的吗? 或者这会创建一个悬空引用,因为Foo()的临时值将在?:表达式的末尾被销毁?
在此代码中,条件运算符的第二个和第三个操作数具有不同的值类别(左值和右值)。
这意味着条件运算符的结果是Foo
类型的prvalue,它表示从所选操作数复制初始化的临时对象。
引用直接绑定到此临时对象,因此临时生命周期延长。
笔记:
*someLValue
,甚至也不会绑定到Foo()
。 Foo()
初始化的临时值是一个复制省略上下文,因此在这种情况下您可能无法观察到临时值。 const
即使引用是const
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.