看看這段代碼:在這種情況下,std :: stack :: push()和std :: stack :: emplace()是否有區別?
struct Dummy
{
int bla;
int blabla;
char character;
Dummy (int b, int bb, char c)
: bla(b), blabla(bb), character(c)
{}
};
std::stack<Dummy> s;
Dummy dummy;
s.push(dummy); // (1)
s.emplace(dummy); // (2)
我看不出(1)
和(2)
之間的差異。我知道emplace()
當你的對象被添加的構造函數提供的參數是有用的,例如:
s.emplace(1, 2, 'c');
,但我不知道其中的差別是在我,因爲這兩個push()
和emplace()
描述的情況應該是什麼請參考當地dummy
對象,並使用copy ctor或類似的東西創建一個新對象。 push()
是否在過程中創建了任何臨時對象?
爲什麼你認爲需要有所不同?一般而言,emplace替代push,更通用,有時效率更高。 – rici 2014-11-03 15:42:44
沒有什麼區別,因爲它們都構造了傳入的參數的副本。'emplace()'在你想完善前面的參數時很有用。 – 0x499602D2 2014-11-03 15:46:43
由於您傳遞的參數,第二次調用Dummy :: Dummy(const Dummy&)嗎?我會看到一個使用emplace,比如s.emplace(); – Exceptyon 2014-11-03 15:50:12