此代码按预期工作(在此处在线)。最后v
是空的,w
不是空的,因为它已经窃取了v
.
vector<int> v;
v.push_back(1);
cout << "v.size(): " << v.size() << endl;
auto vp = move(v);
vector<int> w(vp);
cout << "w.size(): " << w.size() << endl;
cout << "v.size(): " << v.size() << endl;
但是如果我替换auto vp=move(v)
为
vector<int> && vp = move (v);
然后就不动了。相反,它复制并且两个向量最后都不为空。如图所示。
澄清:更具体地说,什么是自动派生类型vp
?如果不是vector<int> &&
,那还能是什么?为什么这两个例子尽管如此相似却给出了不同的结果?
额外:我也试过这个,它仍然复制而不是移动
std :: remove_reference< vector<int> > :: type && vp = move(v);