11

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

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

   m1.emplace(move(is1));
}

似乎是 C++0x emplace()move()有人可以为我解释一下吗?我读过关于move(),但我真的不明白它做了什么(在引擎盖下)。

4

1 回答 1

16

使用向量放置更容易理解。my_vector.emplace_back(1, 2, 3)基本上是my_vector.push_back(some_type(1, 2, 3)). 现在可以将任何构造函数用于就地构造,而不是就地复制构造对象,从而节省临时对象的创建、复制(或移动)和销毁。安置是由完美的转发驱动的。

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

于 2011-03-29T10:06:16.177 回答