此代碼按預期工作(在線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