【发布时间】:2014-04-08 13:29:31
【问题描述】:
在 C++11 中使用 vector::push_back() 代替 vector::emplace_back() 以及类似地使用 map::insert() 代替 map::emplace() 是否仍然有意义?
我的理解是,新的现代 C++11 emplace-方法使用给定的参数(完美地转发给构造函数)构造对象就地,因此它们可以保存副本和移动操作,因此它们应该比旧的 C++98/03 对应物更有效。
我错过了什么吗?
不鼓励使用旧式方法是否安全?
【问题讨论】:
-
如果您需要向后兼容?
-
emplace_back() 将调用构造函数,push_back() 将调用现有对象的复制或移动。
-
@chris:根据您链接的线程(谢谢),似乎使用
vector::push_back而不是emplace_back的唯一原因是能够使用统一初始化。我的理解正确吗?无论如何,从性能的角度来看,emplace_back应该更好,对吧? -
@RedX:如果只是为了向后兼容,那他们可以不鼓励使用新代码吗?
标签: c++ performance c++11 stl