2017-04-19 182 views
0
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對象。C++ map emplace

int main() 
{ 
    map<int, Foo> m; 
    m.emplace(1, 2, 3); 
} 

上述代碼不能編譯。爲什麼emplace未使用參數23構造Foo?如果Foo構造函數有1個參數,則上述樣式有效。

我使用的是不是最新的gcc 4.9.2。有沒有人認爲上面的代碼會在以後的編譯器中編譯?

+0

參見[這](http://stackoverflow.com/q/27960325/241631),可能是重複的 – Praetorian

回答

0

您的mapvalue_typestd::pair<const int, Foo>pair沒有constructor取三個int參數。

你可以做

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

或者,如果你真的不想調用Foo此舉構造,

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