请选择 进入手机版 | 继续访问电脑版

C++ 中的值传递和引用传递

[复制链接]
密战 发表于 2021-1-1 10:30:37 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本文主要先容C++中的值通报(pass-by-value)引用通报(pass-by-reference)的区别。
1 pass-by-value

在 C++ 内里,一个函数在使用参数时,如果使用 pass-by-value 方式,那么编译系统会在调用该函数的地方,把实参复制一份传给函数的形参
用法示例:int FunA(string strTest);
这种做法有以下几个问题:

  • 第一,如果在函数里修改传给函数的参数值,实际上我们修改的只是实参的副本,而在调用函数的位置,这个实参值自己没有改变;
  • 第二,此过程中举行的副本拷贝动作会泯灭系统的资源,如果拷贝的参数是比力复杂的 struct 大概 class 等范例,复制出一份副本的本钱(时空开销)很大;
2 pass-by-reference

在 C++ 内里,一个函数在使用参数时,如果使用 pass-by-reference 方式,那么编译系统会在调用该函数的地方,直接将实参的内存地点(指针)传给形参
用法示例:int FunA(string & strTest);
这种做法有以下几点利益:

  • 第一,由于函数的参数通报的是把实参的地点拷贝给形参,因此形参和实参对应的是同一块内存地点,所以对形参的修改自然会反映到实参上;
  • 第二,在 C++ 中,指针的地点是一个 int 范例,说以纵然在 64 位系统中,指针地点的复制本钱(8字节)也是可以接受的;
  • 第三,因为 C++ 规定引用不能为空,所以在函数中传进来引用可以直接使用,而如果传进来的是指针范例(实际上是值通报、引用通报之外的指针通报方式),那么还需要先判断指针是否为空,易用性不强。
3 总结

综合对比上述两种函数参数的值通报方式,可以看出在C++中,一般情况下都会优先使用“引用通报”。
比方:
  1. int FunA(const string strTest)  // 值通报{    // some code}int FunB(const string & strTest)    // 引用通报,这里加了const关键字,为常引用。优选{    // some code}
复制代码
 

来源:https://blog.csdn.net/liitdar/article/details/85982561
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )