有没有一种有效的方法可以通过值来返回自赋值?

对于输出参数,通常的cpp建议是:”避免用可修改的引用传递输出参数,而用值返回”。”避免用可修改的引用来传递输出参数, 用值来代替返回”. 现在如果我们有一种情况,我们想修改一个对象本身,比如。

string s = "whatever";
//maybe in a loop
s = modify(s);

那么它看起来像一个函数 string modify (string) 总是被类似于 modifyInPlace(string &). 有没有什么办法解决这个问题?有没有什么根本性的原因导致这个问题永远无法解决?我认为按值取值,按值返回的语义更安全,更清晰。

例如比较测量。http:/quick-bench.com-XZqOZw-X739tlcOI8vau8DU24w。

解决方案:

有没有什么办法解决这个问题呢?

你必须做出一个选择。要么是

  • 创建一个修改后的副本,这对某些类型来说可能会很昂贵,或
  • 就地修改,这不符合你所描述的偏好,但对某些类型来说可能更快。

你需要考虑哪种方式对你的程序更重要。

也就是说,如果你通过移动来创建修改后的副本,那么修改后副本的开销通常不会很大。

s = modify(std::move(s));

这里是你的基准的修改版: http:/quick-bench.comX_ONMO_yiAqbkkcbvsiC_Xpk5Sw


当您创建的新值不是基于同一类型的现有值时,”无参考输出参数 “的经验法则很好用。在这种情况下,通常没有可用的就地替代方法。

给TA打赏
共{{data.count}}人
人已打赏
未分类

我想把导航项Sign up移到右边,我试过ml-auto和justify-content-end,但它没有移动。

2022-9-9 2:34:19

未分类

通过向左或向右滑动来管理Offset的dx。

2022-9-9 2:34:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索