push_back()函数向容器中加入一个临时对象(右值元素)时, 首先会调用构造函数生成这个对象,然后条用拷贝构造函数将这个对象放入容器中, 最后释放临时对象。但是emplace_back()函数向容器中中加入临时对象, 临时对象原地构造,没有赋值或移动的操作,因此emplace_back()大部分可以取代push_back()。
push_back总是允许使用统一的初始化,例如:
struct node {
int a;
int b;
};
std::vector v;
v.push_back({ 42, 121 });
另一方面,v.emplace_back({ 42, 121 });将无法正常工作。