gpt4 book ai didi

c++ - 如何在 `push_*()` 和 `emplace_*()` 函数之间进行选择?

转载 作者:行者123 更新时间:2023-12-02 13:37:29 25 4
gpt4 key购买 nike

我了解这两个函数变体之间的区别。

我的问题是:我通常应该使用良好的旧 push_*() 版本,并且仅在我的探查器告诉我这将有利于性能时才切换到 emplace_*() (也就是说,不要过早优化)?或者我应该切换到使用 emplace_*() 作为默认值(也许不要不必要地悲观代码 - 类似于 i++++ifor 循环中)?

在现实的非人为用例中,是否有任何变体比其他变体更通用(即对插入的类型施加更少的限制)?

最佳答案

在编写代码时我不会担心性能。当您已经拥有可以分析的代码时,性能会在以后出现。

我宁愿担心代码的表达能力。粗略地说,push_back 适用于当您有一个元素并希望在容器内放置一个拷贝时。 emplace_back 是就地构造元素。

考虑什么具有较低的“wtf-count”:

struct foo {int x;int y;};

void foo_add(const foo& f,std::vector<foo>& v) {
v.emplace_back(f); // wtf ?!? we already have a foo
v.push_back(f); // ... simply make a copy (or move)
}

void foo_add(int x, int y, std::vector<foo>& v) {
auto z = foo{x,y}; // wtf ?!?
f.push_back(z); // why create a temporary?
f.emplace_back(x,y); // ... simply construct it in place
}

关于c++ - 如何在 `push_*()` 和 `emplace_*()` 函数之间进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59878001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com