C++ C++;地图安放 structfoo{ Foo(inta,intb):a_u(a),b_u(b){} INTA_; int b_; }; int main() { 向量向量机; 向量后置(1,2); }

C++ C++;地图安放 structfoo{ Foo(inta,intb):a_u(a),b_u(b){} INTA_; int b_; }; int main() { 向量向量机; 向量后置(1,2); },c++,c++11,C++,C++11,上面的代码是编译的,因为emplace_back在适当的位置构造了Foo对象 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); } intmain() { 地图m; m、 炮位(1,2,3); } 上面的代码无法编译。为什么emplace不使用a

上面的代码是编译的,因为emplace_back在适当的位置构造了Foo对象

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);
}
intmain()
{
地图m;
m、 炮位(1,2,3);
}
上面的代码无法编译。为什么
emplace
不使用args
2
3
在适当的位置构建
Foo
?如果
Foo
构造函数有1个参数,则上述样式有效


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

您的
映射的
值类型是
std::pair
<代码>对
没有取三个
int
参数

你能行

int main() 
{
    map<int, Foo> m;
    m.emplace(1, 2, 3);
}
或者,如果您确实不想调用
Foo
的移动构造函数

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

map
value\u type
std::pair
<代码>对
没有取三个
int
参数

你能行

int main() 
{
    map<int, Foo> m;
    m.emplace(1, 2, 3);
}
或者,如果您确实不想调用
Foo
的移动构造函数

m.emplace(1, Foo(2, 3));
看,可能是重复的看,可能是重复的