1

我知道容器上的 emplace 函数的一般概念(“就地构造新元素”)。
我的问题不是它的作用,而是更像是有效的 C++11 之一。

什么是决定何时使用(例如何时使用std::vectoremplace_back()和何时使用push_back()以及一般 emplace* 与“旧”插入函数的好规则?

4

1 回答 1

3

emplace_back()只有在将对象放入容器之前必须从头开始构造对象时才真正有意义。如果你给它一个预先构建的对象,它基本上会退化为push_back(). 如果对象的复制成本很高,或者您必须在紧密循环中创建大量对象,您通常会看到差异。

我倾向于替换以下代码:

myvector.push_back(ContainedObject(hrmpf));

myvector.emplace_back(hrmpf);

如果前者出现在探查器输出中。对于新代码,emplace_back如果可以的话,我可能会使用(我们在工作中仍然主要使用 VS2010,它的实现emplace_back()有点步履蹒跚)。

于 2013-07-27T00:31:06.683 回答