C ++ map emplace

时间:2017-04-19 23:15:05

标签: c++ c++11

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 Foo2来构建3?如果Foo构造函数有1个arg,则上述样式有效。

我使用的是gcc 4.9.2,这不是最新的。有人认为上面的代码会在以后的编译器中编译吗?

1 个答案:

答案 0 :(得分:0)

value_type的{​​{1}}为mapstd::pair<const int, Foo>没有constructor三个pair参数。

你可以做到

int

或者,如果您真的不想调用m.emplace(1, Foo(2, 3)); 的移动构造函数,

Foo