emplace_back和push_back在功能上是一致的,即在容器后方插入新的元素。
异同
相同点:
1. 支持传入右值 (push_back是c++11后才支持的)
不同点:
push_back:
a. 一定会发生拷贝构造
b. 不支持原地构造
c. 支持一个构造函数(此时其实也是发生了隐式构造)
emplace_back:
a. 不一定会发生拷贝构造
b. 支持原地构造
c. 支持多个构造函数
总结
虽然在性能方面emplace_back优于push_back,但emplace_back也有一些缺点:
1. emplace_back一般发生错误都会在比较深的位置,而push_back则更容易定位问题
2. push_back是函数,可以支持隐式转换,而emplace_back本质上是模板,不支持隐式转换