什么是multimap :: emplace()和move()?

Mor*_*ang 11 c++ stl multimap rvalue-reference c++11

我正在查看关于multimap的MSDN文档,并发现它有一个成员函数multimap :: emplace().以下是该成员函数的示例.

int main( ) {
   using namespace std;
   multimap<int, string> m1;
   pair<int, string> is1(1, "a");

   m1.emplace(move(is1));
}
Run Code Online (Sandbox Code Playgroud)

看来,emplace()move()是C++ 0x中.有人可以帮我解释一下吗?我读到了move(),但我真的不明白它做了什么(引擎盖下).

fre*_*low 16

使用向量更容易理解安置.my_vector.emplace_back(1, 2, 3)基本上是一个有效的捷径my_vector.push_back(some_type(1, 2, 3)).现在,任何构造函数都可以用于就地构造,而不是就地复制构造对象,从而节省临时对象的创建,复制(或移动)和破坏.Emplacing由完美转发提供支持.

std::move(expression)基本上是对xvalue的强制转换,它有效地允许整个表达式绑定到右值引用.您通常这样做是为了从您不再感兴趣的命名对象启用资源窃取,因为它们很快就会被销毁.

  • 这是一个比接受的答案更好的答案,至少是不准确的,可以说是错误的. (4认同)