【发布时间】: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 2 和 3 就地构造 Foo ?如果Foo 构造函数有 1 个参数,则上述样式有效。
我使用的不是最新的 gcc 4.9.2。有人认为上面的代码会在以后的编译器中编译吗?
【问题讨论】:
-
见this,可能是重复的