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

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

从签名中,emplace更简单,不涉及重载.是否有任何问题停止使用插入并始终使用emplace?

注意:有一些问题询问了emplace和insert / push_back等之间的区别(例如here,herehere)我理解其中的区别,在我看来,emplace在各方面都更好.我只想确认是否可以弃用插入.

解决方法

有一些示例 here可以适用于安置和插入,显示行为可能不同的时间.

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

#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,除非您明确指定,否则会收到错误.

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...