我的编译器是最新的 VC++ 2013 预览版。
#include <utility>
struct BigObject { ... };
void f(BigObject&&){}
void f(BigObject&) {}
void f(BigObject) {}
int main()
{
BigObject big_obj;
BigObject& r1 = big_obj; // OK.
BigObject&& r2 = big_obj; // error C2440
BigObject&& r3 = std::move(big_obj); // OK.
BigObject&& r4 = r3; // error C2440
f(r3); // error C2668: 'f' : ambiguous call to overloaded function
}
我们何时、何地以及为什么要使用BigObject&& rv = std::move(big_obj);
?