首页 > 后端开发 > C++ > 我们还应该通过 `const std::string&` 引用传递 `std::string` 吗?

我们还应该通过 `const std::string&` 引用传递 `std::string` 吗?

DDD
发布: 2024-12-10 00:27:16
原创
323 人浏览过

Should We Still Pass `std::string` by `const std::string&` Reference?

传递 const std::string& 参考文献的过时:Herb Sutter 的观点

在最近的一次演讲中,Herb Sutter 表达了通过 const& 传递 std::vector 和 std::string。他建议传统方法:

std::string do_something(const std::string& inval)
登录后复制

与以下相比现在不太理想:

std::string do_something(std::string inval)
登录后复制

虽然人们承认 inval 保留了其大小,但 Herb 的论点源于涉及函数链的场景。考虑 A 调用 B,B 又调用 C 的示例:

情况 1:通过 const 引用传递

void B(const std::string& str) { C(str); }
void C(const std::string& str) { /* Use str but do not store it */ }
登录后复制

当 C 需要存储时,进行复制操作变得必要:

void C(const std::string& str) { m_str = str; }
登录后复制

但是,使用 const& 会阻止 C 访问移入其的底层数据

情况 2:按值传递

void B(std::string str) { C(std::move(str)); }
void C(std::string str) { m_str = std::move(str); }
登录后复制

在这种情况下,字符串通过函数调用移动,避免不必要的复制。通过短字符串优化 (SSO) 避免小字符串内存分配的好处抵消了移入值的性能开销。

最终,通过 const 引用或值传递之间的选择取决于具体用途案例以及开发人员对内存分配效率与潜在性能缺陷的偏好。

以上是我们还应该通过 `const std::string&` 引用传递 `std::string` 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板