以下在 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/