gpt4 book ai didi

c++ - 我应该依赖复制省略还是移动语义?

转载 作者:太空狗 更新时间:2023-10-29 23:32:04 26 4
gpt4 key购买 nike

给定一个 vector

std::vector<BigObject> v;

还有一个工厂函数

BigObject genBigObject();

我想避免复制 BigObject 实例。

哪个更快?

v.push_back(genBigObject());

v.push_back(std::move(genBigObject()));

我可以相信复制省略总是会发生吗? (我可以删除 BigObject 上的复制构造函数,但是,嗯......)

最佳答案

std::move() 的目的是获取一个左值并将其视为一个右值,以便其他人清楚如果他们愿意,他们可以蚕食物体的内部结构。

genBigObject() 已经是一个右值。您不需要 move() 将它变成一个 - move() 根本不会为您提供任何有值(value)的东西。所以不要这样做。您甚至不需要考虑下游实际发生了什么的问题 - move() 是代码和读者的信号,表明您正在做一些可能不安全的事情,但在这种情况下.. .你不是。

对于这种特定 情况,无论如何您都在调用 push_back() 的右值引用重载 - 这会触发临时对象的临时物化。临时实体化的发生是因为对 push_back() 的特定调用还是对 move() 的稍早调用都没有区别。

关于c++ - 我应该依赖复制省略还是移动语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54442523/

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