在C ++ 11emplace_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);
复制并且不会移动。其他两个动作应相等。