const 引用会延长临时对象返回的临时对象的寿命吗?

Ale*_*dan 0 c++ lifetime rvalue temporary-objects reference-binding

我知道 const 引用会延长本地临时文件的寿命。现在我问自己是否可以在临时对象链上扩展此属性,也就是说,我是否可以安全地定义:

std::string const& foo = aBar.getTemporaryObject1().getTemporaryObject2();
Run Code Online (Sandbox Code Playgroud)

我的感觉是,由于第一个方法aBar.getTemporaryObject1()已经返回了一个临时对象,因此不适用于aBar.getTemporaryObject2().

M.M*_*M.M 5

生命周期扩展仅适用于引用直接绑定到该临时对象的情况。

例如,从该引用初始化另一个引用不会进行另一个扩展。

但是,在您的代码中:

std::string const& foo = aBar.getTemporaryObject1().getTemporaryObject2();
Run Code Online (Sandbox Code Playgroud)

您直接绑定foo到 的返回值getTemporaryObject2(),假设它是一个按值返回的函数。这是否是另一个临时对象的成员函数或其他什么都没有区别。所以这段代码没问题。

由 返回的对象的生命周期getTemporaryObject1()不会延长,但这并不重要(除非getTemporaryObject2的返回值包含对该对象的引用或指针,或其他内容,但由于它显然是 a std::string,所以不能)。