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

时间:2011-03-29 07:58:34

标签: c++ stl c++11 multimap rvalue-reference

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

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

   m1.emplace(move(is1));
}

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

1 个答案:

答案 0 :(得分:16)

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

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

相关问题