首页 > 后端开发 > C++ > 现代 C 中大对象应该默认值传递吗?

现代 C 中大对象应该默认值传递吗?

Linda Hamilton
发布: 2024-12-10 01:48:13
原创
1054 人浏览过

Should Pass-by-Value Be the Default for Large Objects in Modern C  ?

重新思考 C 11 中的值传递

在 C 世界中,传统上不鼓励大规模使用值传递由于性能问题而产生的对象。然而,C 11 中右值引用和移动构造函数的引入为高效传递对象开辟了新的可能性。

按值传递现在是最佳默认值吗?

根据行业专家 Dave Abrahams 的说法,如果需要在函数体内进行复制,则按值传递 std::vector 和 std::string 等大型对象是合理的。这允许编译器执行优化,消除了程序员显式复制的需要。

优点:

  • 仅对左值和左值进行最少的工作纯右值参数。
  • 简化调用者的语法,允许按引用传递、按纯右值传递、和 pass-by-xvalue。

自定义对象:

对于自定义对象,通过引用传递 const 仍然是一个可行的选项,因为它提供灵活性并最大限度地减少无意修改原始对象的风险。

最佳实践:

  • 如果需要在函数内进行复制,则按值传递对象。
  • 仅在必要时使用右值引用来优化移动语义。
  • 考虑对自定义对象的 const 进行引用传递,以确保不变性和所有权

示例:

要实现推荐模式,值构造函数可以编写如下:

以上是现代 C 中大对象应该默认值传递吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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