【问题标题】:C++ map emplace [duplicate]C ++地图安放[重复]
【发布时间】:2017-04-19 23:15:04
【问题描述】:
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 23 就地构造 Foo ?如果Foo 构造函数有 1 个参数,则上述样式有效。

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

【问题讨论】:

  • this,可能是重复的

标签: c++ c++11


【解决方案1】:

您的mapvalue_typestd::pair&lt;const int, Foo&gt;pair 没有带有三个 int 参数的 constructor

你可以的

m.emplace(1, Foo(2, 3));

或者如果你真的不想调用Foo的移动构造函数,

m.emplace(std::piecewise_construct,
          std::make_tuple(1),
          std::make_tuple(2, 3));

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 2013-03-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多