给定
std::map<int, int> myMap;
以下哪个陈述
myMap.emplace(1, 2);
myMap.emplace({1, 2});
myMap.emplace(std::make_pair<int,int>(1,2));
是有效的,为什么?在我看来,第二个(带有
{}
)应该确实可以工作,如果第三个可以的话。 最佳答案
myMap.emplace(1,2);
无效,对我来说效果很好。myMap.emplace({1,2});
无效,因为emplace
转发了,它的参数是就地创建对象,而不是将value_type
类型的对象(来自 map )本身作为参数。由于它没有采用目标类型的对象(std::pair
),因此编译器无法使用初始化程序列表创建该对象。
如果通过直接调用std::pair
来构造emplace
,那么您根本不会从emplace
中受益,并且它的存在将毫无意义。myMap.emplace(std::make_pair<int,int>(1,2));
有效,但可能不是您想要的。你要
myMap.insert(std::make_pair(1,2));
要么
myMap.insert(decltype(myMap)::value_type(1,2));
因为
emplace
在您已经拥有std::pair
时不会提供任何好处。关于c++ - 对map::emplace的语法感到困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19433215/