Этот код работает должным образом (онлайн здесь ).В конце 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> &&
, то что еще это может быть?Почему два примера дают разные результаты, несмотря на то, что они очень похожи?
Extra : я тоже попробовал это, и он все равно копировался вместо перемещения
std :: remove_reference< vector<int> > :: type && vp = move(v);