首先,我知道这个问题(点此),但我认为我的问题不同。
我知道
但我不明白的是,为什么C ++标准委员会决定需要一个新成员函数。他们为什么不能只扩展
我知道
std :: vector <T> :: emplace_back
是什么——我理解为什么要使用它而不是push_back()
。它使用可变参数模板,允许我将多个参数转发到新元素的构造函数中。但我不明白的是,为什么C ++标准委员会决定需要一个新成员函数。他们为什么不能只扩展
push_back()
的功能呢? 就我所看到的,push_back
在C ++11中可以被重载为:template <class... Args>
void push_back(Args&&... args);
这样做不会破坏向后兼容性,同时允许您传递N个参数,包括可能调用常规rvalue或复制构造函数的参数。事实上,GCC C++11的push_back()
实现只是简单地调用了emplace_back()
:
void push_back(value_type&& __x)
{
emplace_back(std::move(__x));
}
所以,我认为不需要使用 emplace_back()
。他们只需要添加一个重载函数push_back()
,该函数接受可变参数并将参数转发给元素构造函数即可。
我错了吗?是否有某些原因需要使用全新的函数?
vector<SomeType> v;
,比较v.emplace_back(123)
和v.push_back(123)
。 - Gene Bushuyev