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,这不是最新的。有人认为上面的代码会在以后的编译器中编译吗?
答案 0 :(得分:0)
value_type
的{{1}}为map
。 std::pair<const int, Foo>
没有constructor三个pair
参数。
你可以做到
int
或者,如果您真的不想调用m.emplace(1, Foo(2, 3));
的移动构造函数,
Foo