はvs13に次のコードを書きました。 myvector
はまだ彼の "Hello World"を最後に持っていました。このような通常のC++ 98の繰り返し使用 :はSTD ::動きが動かなかったのはなぜ
std::vector<std::string> myvector(1000);
std::fill(myvector.begin(), myvector.end(), "Hello World");
std::vector<std::string> pushto;
for (auto s = myvector.begin(); s != myvector.end();s++)
pushto.push_back(std::move(*s));
は実際に働いていた、との動きが呼び出されました。 myvector
文字列が空でした。 最初のより現代的な表記がなぜ機能しないのですか?
は、最初の例では、実際にコンパイルしていますか?私は 'std :: move(* s)'に '*'があるべきではないと思います。 – aschepler
誰も移動がオリジナルを消去するはずはないと言ったことに注意してください。移動後、オリジナルは*有効であるが不特定の*状態にある。 '&'を置いても、元のオブジェクトが新しいオブジェクトと同じ値(つまり、変更前と同じ値)を持つことは完全に有効です(そして、時には必要な場合もあります)。 – lorro