我可以使用always emplace替换插入单个元素吗?

tin*_*lyx 6 c++ c++11

我想知道在将单个元素插入到STL容器中时是否可以始终使用emplace替换insert,例如set,unordered_set?

从签名,emplace更简单,不涉及重载.是否有任何问题一直停止使用insert和使用emplace

注意:有些问题询问emplaceinsert/ push_back等之间的区别(例如,这里,这里这里)我理解差异,在我看来,emplace在各方面都更好.我只是想确认是否可以弃用insert.

Bri*_*ian 5

有一些例子在这里,可以适应emplaceinsert,表示当行为可能会有所不同。

这些例子可能看起来有点人为,所以我将给出一个希望看起来不那么假的例子:

#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
}
Run Code Online (Sandbox Code Playgroud)

insert可以推导出模板参数,id因为它知道它想要什么类型。因为emplace除非您明确指定,否则您会收到错误消息。