C ++ \ templace_back参数

时间:2017-04-07 08:49:19

标签: c++ performance c++11

这是我日常工作中的一段代码。我只想问你两种情况之间是否存在差异,特别是在性能方面。

std::vector< std::pair<std::string, std::string> > aVec;

// case 1
aVec.emplace_back("hello", "bonjour");

// case 2
aVec.emplace_back(std::pair("hello", "bonjour"));

以下问题:

这两个案例的std :: list怎么样?

1 个答案:

答案 0 :(得分:8)

emplace_back将就地构造元素,传入的参数将完美地转发给元素的构造函数。

对于第一种情况,概念上只需要一步,即调用std::pair的适当构造函数直接在vector中构造元素。

对于第二种情况,需要三个步骤; (1)将调用适当的constructor来构造临时std::pair,(2)该元素将在vector中从临时std::pair就地构建, (3)临时std::pair被销毁。