我想知道是否可以在将单个元素插入STL容器(例如set,unordered_set)中时始终使用emplace
替换insert
吗?
从签名来看,emplace
更简单,并且不涉及重载。停止使用insert
和一直使用emplace
是否有任何问题?
注意:这里有一些问题,询问emplace
和insert
/push_back
等之间的区别。(例如here,here和here),我理解其中的区别,在我看来emplace
在各方面都更好。我只想确认是否可以弃用insert
。
最佳答案
有一些示例here可以适应emplace
和insert
,显示了何时行为可能有所不同。
这些示例可能看起来有些虚假,因此我将给出一个希望看起来不会那么多的示例:
#include <set>
template <typename T>
T id(T x) { return x; }
int main() {
std::set<int(*)(int)> s;
s.insert(id); // OK
s.emplace(id); // error
s.emplace(id<int>); // OK
}
insert
可以推断出id
的模板参数,因为它知道所需的类型。除非您明确指定,否则对于emplace
您会收到错误消息。