C ++ 11では、インプレース構築が可能であるemplace_back()
ため、(効率の観点から)一般的に好まれますが、すでに構築されたオブジェクトで使用する場合も同様ですか?push_back()
push_back(std::move())
たとえばemplace_back()
、次のような場合でもまだ好まれますか?
std::string mystring("hello world");
std::vector<std::string> myvector;
myvector.emplace_back(mystring);
myvector.push_back(std::move(mystring));
// (of course assuming we don't care about using the value of mystring after)
さらに、上記の例には、代わりに次のような利点がありますか。
myvector.emplace_back(std::move(mystring));
または、ここでの移動は完全に冗長ですか、それとも効果がありませんか?
myvector.emplace_back(mystring);
コピーして移動しません。他の2つの動きは、同等である必要があります。