首先,我知道this question,但我不相信我在問同樣的事情。爲什麼不能push_back被重載來執行emplace_back的工作?
我知道什麼std::vector<T>::emplace_back
確實 - 我明白爲什麼我會在push_back()
以上使用它。它使用可變參數模板,允許我將多個參數轉發給新元素的構造函數。
但我不明白的是爲什麼C++標準委員會決定需要一個新的成員函數。爲什麼他們不能簡單地擴展push_back()
的功能。據我所看到的,push_back
可以在C++ 11超載是:
template <class... Args>
void push_back(Args&&... args);
這不會破壞向後兼容性,同時允許你通過N個參數,包括將調用一個正常的右值或參數複製構造函數。事實上,GCC C++ 11實現push_back()
只需調用emplace_back反正:
void push_back(value_type&& __x)
{
emplace_back(std::move(__x));
}
所以,我看到它的樣子,也沒有必要爲emplace_back()
。他們需要添加的是push_back()
的重載,它接受可變參數,並將參數轉發給元素構造函數。
我錯了嗎?有什麼理由需要一個全新的功能嗎?
這看起來類似:http://stackoverflow.com/questions/4303513/push-back-vs-emplace-back – moka
好問題。 @moka他知道這兩個函數的區別。他甚至與這個特定問題聯繫在一起。 – 2011-08-09 18:06:08
它們有不同的含義,在你提到你閱讀的問題中都有解釋。比如'v.emplace_back(123)'和'v.push_back(123)'例如對於'vector v;',並且從int中隱式轉換。 –