返回引用也会延长它的生命周期吗?

Does returning a reference extend its lifetime too?

AFAIK,在下面的代码中,引用 ro1 的生命周期被延长到作用域的末尾(函数 g()):

class Some {
  // Implementation here
};
Some f() {
  return Some(/* constructor parameters here*/);
}
void g() {
  Some&& ro1 = f();
  // ro1 lives till the end of this function
}

返回此引用怎么样?该对象是否仍存在于 g1() 中,还是会在退出 h() 时被销毁?

Some&& h() {
  Some&& ro1 = f();
  // Code skipped here
  return std::forward<Some>(ro1);
}

void g1() {
  Some&& ro2 = h();
  // Is ro2 still refering to a valid object?
}

How about returning this reference? Will the object still live in g1()

没有。寿命延长只发生一次。从 f() 返回的临时对象绑定到引用 ro1 并且其生命周期延长到该引用的生命周期。 ro1 的生命周期在 h() 结束时结束,因此 g1() 中对 ro2 的任何使用都是悬空引用。

为了使其工作,您需要处理以下值:

Some h() {
  Some ro1 = f();
  // Code skipped here
  return ro1;
}

请注意,RVO 在这里仍然适用。