【发布时间】:2018-06-05 09:41:54
【问题描述】:
所以,我有以下课程:
class Foo {
public:
Bar &&bar() {
return std::move(_bar);
}
private:
Bar _bar;
}
我知道在以下情况下使用此类是有效的:
Bar bar;
{
Foo foo;
bar = foo.bar(); // bar is move-assigned, as foo is still in scope
}
现在,我想知道的情况是:如果我直接从一个方法返回 bar 而不是预先存储它会发生什么:
Bar testFunc() {
Foo foo;
return foo.bar();
}
Bar test = testFunc();
// is test now valid?
我认为这在理论上应该没问题,因为 testFunc 返回一个在 foo 被销毁之前从右值构造的值 - 但如果编译器应用返回值优化,情况仍然如此吗?
我想我有点困惑这到底是如何工作的......
【问题讨论】:
-
return foo.bar()不是 RVO 的有效标准,所以是的,将从右值复制一份。