如果我有课
class foo {
public:
foo() { // spend some time and do something. }
private:
// some data here
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个foo的向量,我想把这个向量放到另一个向量中
vector<foo> input; // assume it has 5 elements
vector<foo> output;
Run Code Online (Sandbox Code Playgroud)
这两条线是否有任何性能差异?
output.push_back(input[0])
output.emplace_back(input[0])
Run Code Online (Sandbox Code Playgroud)
Mik*_*our 12
这两条线是否有任何性能差异?
不,两者都将使用复制构造函数初始化新元素.
emplace_back 使用更多(或更少)的参数构建时,可能会带来好处:
output.push_back(foo{bar, wibble}); // Constructs and moves a temporary
output.emplace_back(bar, wibble); // Initialises directly
Run Code Online (Sandbox Code Playgroud)
真正的好处emplace不在于性能,而在于允许在容器中创建不可复制(在某些情况下是不可移动的)元素.