このコードは期待どおりに機能します (オンラインはこちら)。の中身を盗んでいるので最後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> &&
、他に何が考えられますか? 2 つの例が非常に似ているにもかかわらず、なぜ異なる結果になるのでしょうか?
エクストラ:これも試しましたが、移動ではなくコピーされました
std :: remove_reference< vector<int> > :: type && vp = move(v);