C++11 中的 emplace

发布时间:2024年01月22日

最近读《C++ 标准库》这本书,发现C++11中大部分的容器对于添加元素除了传统的 insert 或者 pusb_back/push_front 之外都提供一个新的函数叫做 emplace。 比如如果你想要向 std::vector 的末尾添加一个数据,你可以:

std::vector<int> nums;
nums.push_back(1);

你也可以使用:

std::vector<int> nums;
nums.empace_back(1);

那么这两种方式的区别到底是什么呢?在《C++标准库》一书中没有给出解释,我查了一 下相关的资料,在此做一个总结。

避免不必要的临时对象的产生

emplace 最大的作用是避免产生不必要的临时变量,因为它可以完成 in place 的构 造,举个例子[^1]:

struct Foo {
    Foo(int n, double x);
};

std::vector<Foo> v;
v.emplace(someIterator, 42, 3.1416);        // 没有临时变量产生
v.insert(someIterator, Foo(42, 3.1416));    // 需要产生一个临时变量
v.insert(someIterator, {42, 3.1416});       // 需要产生一
文章来源:https://blog.csdn.net/chenyuping333/article/details/135748026
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。