首页 > 后端开发 > C++ > 正文

按值传递或引用传递:'想要速度?按值传递”何时是真的?

Susan Sarandon
发布: 2024-10-27 01:34:03
原创
447 人浏览过

  Passing by Value or Reference: When is

“想要速度?按价值传递” - 探索性能影响

Scott Meyers 的声明“想要速度?按价值传递”提出了问题关于按值传递对象与按引用传递对象的性能优势。在这种情况下,按值传递涉及复制操作,而按引用传递则避免了不必要的复制。

考虑以下结构体 X 和 Y 的示例:

<code class="cpp">struct X {
  std::string mem_name;
  X(std::string name) : mem_name(std::move(name)) {}
};
struct Y {
  std::string mem_name;
  Y(const std::string &name) : mem_name(name) {}
};</code>
登录后复制

在 X 的构造函数中,在调用 std::string 上的移动构造函数以初始化 mem_name 之前,参数名称会被复制到临时对象。在 Y 的构造函数中,参数名称是 const 引用,但仍会进行复制以初始化 mem_name。因此,X 执行“复制然后移动”操作,而 Y 执行单个复制。

根据 Meyers 的论点,按值传递(如 X 中)似乎会更快,因为优化的潜力,例如返回值优化 (RVO)。然而,仔细检查发现,结果取决于传递的参数类型(左值或右值):

  • Lvalues:X 和 Y 都将执行复制(在初始化 name 时为 X,初始化 mem_name 时为 Y),然后在 X 中进行移动操作。
  • Rvalues:如果可以应用 RVO,X 可能只执行移动,而 Y 仍然需要副本。

通常,移动比传递指针更快,这本质上就是通过引用传递的作用。因此,对于右值,X 的性能优于 Y,而对于左值,性能相似。

需要注意的是,这不是通用规则,优化可能会根据编译器和平台的不同而有所不同。建议进行分析以确定特定情况下的最佳方法。

以上是按值传递或引用传递:'想要速度?按值传递”何时是真的?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!