【发布时间】:2013-05-24 09:47:20
【问题描述】:
考虑以下代码:
#include <iostream>
using namespace std;
struct I {
I(I&& rv) { cout << "I::mvcotr" << endl; }
};
struct C {
I i;
I&& foo() { return move(i) };
}
};
int main() {
C c;
I i = c.foo();
}
C 包含 I。而 C::foo() 允许你将 I 移出 C。上面使用的成员函数有什么区别:
I&& foo() { return move(i) }; // return rvalue ref
以及以下替换成员函数:
I foo() { return move(i) }; // return by value
对我来说,他们似乎在做同样的事情:I i = c.foo(); 导致调用I::I(I&&);。
本例未涵盖的后果是什么?
【问题讨论】:
-
如果您将其用作
I&&i = c.foo(),您可能会注意到不同之处。如果你在一个临时对象上调用 foo,你可能会遇到麻烦。 -
很好的例子!非常感谢!
标签: c++ c++11 rvalue-reference rvalue