考虑以下代码:
#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&&);
.
本例未涵盖的后果是什么?