以下在 p 中使用 main 是否安全?我相信绑定(bind) mk_pair 产生的临时对象的生命周期延长到 p 的生命周期,但是 Wrap{1}Wrap{2} 创建的临时对象怎么样?

struct Wrap { int &&x; };

struct Pair { Wrap &&w1, &&w2; };

Pair mk_pair(Wrap &&w1, Wrap &&w2) { return Pair{std::move(w1),std::move(w2)}; }

int main(int argc, char *argv[])
{
  Pair &&p = mk_pair(Wrap{1},Wrap{2});
  std::cout << p.w1.x << ' ' << p.w2.x << '\n';
  return 0;
}

最佳答案

不。 Wrap{1}Wrap{2} 没有绑定(bind)到 main 中的自动引用,所以它们在行尾被破坏。

Pair 返回的 mk_pair 的生命周期延长到 p 的生命周期,但它的引用是悬空的。

关于c++ - 临时子表达式的生命周期,绑定(bind)到一个引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44461266/

10-13 08:09