此代码按预期工作(在线here)。 最后v
为空,w
不为空,因为它已经窃取了v
的内容。什么是std :: move的类型?
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;
但是,如果我有
vector<int> && vp = move (v);
更换auto vp=move(v)
然后,它不动。相反,它的副本和两个矢量在最后都是非空的。如here所示。
澄清:更具体地说,什么是自动派生类型vp
?如果它不是vector<int> &&
,那还有什么呢?为什么这两个例子虽然如此相似,却给出了不同的结果?
额外:我也试过这样,它仍然被复制而不是移动
std :: remove_reference< vector<int> > :: type && vp = move(v);
['move' returns'std :: remove_reference :: type &&'](http://en.cppreference.com/w/cpp/utility/move) –
2011-12-19 01:07:15
事实上,'vector_reference'上的'vector'就我所知,只是给了我们'矢量'。 –
2011-12-19 01:11:09
我试过'std :: remove_reference < vector> :: type && vp = move(v);'但它也不起作用。它复制,不移动。 –
2011-12-19 01:13:27