class A {
public:
explicit A(int x) {}
};
vector<A> v;
v.push_back(1); // compiler error since no implicit constructor
v.emplace_back(1); // calls explicit constructor
以上內容來自David Stone的video。我不明白爲什麼emplace_back
調用 的顯式構造函數?我沒有看到任何在C++標準 使這個合法。只有聽完David Stone的YouTube視頻後,我才知道這件事。std :: map emplace failed with explicit constructor
現在,我嘗試與std::map
一樣。
map<int, A> m;
m.insert(pair<int, A>(1, 2)); // compiler error since no implicit constructor
m.emplace(1, 2); // compiler error since no implicit constructor
爲什麼emplace
在這裏失敗?如果emplace_back
可以調用顯式的 構造函數,那麼爲什麼不emplace
也這樣做?
這與條件明確的構造函數有關,它正式添加在C++ 17中,但是在C++ 11之後由最新版本的GCC實現。 –
我用C++ 14標誌,但我有gcc版本4.9.2。我試着用gcc 6.2,現在都是「m.insert(對(1,2))和m.emplace(1,2);」編譯。另外,對於map.emplace,我不相信有必要使用make_pair。 –