This question already has answers here:
std::map emplace without copying value
(2个答案)
2年前关闭。
上面的代码可以编译,因为emplace_back可以就地构造Foo对象。
上面的代码无法编译。为什么
我正在使用gcc 4.9.2,这不是最新的。有人认为上面的代码可以在以后的编译器中编译吗?
或者,如果您真的不想调用
(2个答案)
2年前关闭。
struct Foo {
Foo(int a, int b) : a_(a), b_(b) {}
int a_;
int b_;
};
int main()
{
vector<Foo> vec;
vec.emplace_back(1, 2);
}
上面的代码可以编译,因为emplace_back可以就地构造Foo对象。
int main()
{
map<int, Foo> m;
m.emplace(1, 2, 3);
}
上面的代码无法编译。为什么
emplace
不使用args Foo
和2
在原位构造3
?如果Foo
构造函数具有1 arg,则上述样式有效。我正在使用gcc 4.9.2,这不是最新的。有人认为上面的代码可以在以后的编译器中编译吗?
最佳答案
您的value_type
的map
是std::pair<const int, Foo>
。 pair
没有带三个int
参数的constructor。
你可以做
m.emplace(1, Foo(2, 3));
或者,如果您真的不想调用
Foo
的move构造函数,m.emplace(std::piecewise_construct,
std::make_tuple(1),
std::make_tuple(2, 3));
关于c++ - C++ Map Emplace ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43507605/
10-09 06:34