博客列表 >c、c++三种传参方式比较

c、c++三种传参方式比较

Coco
Coco原创
2021年12月17日 22:31:36930浏览

  C/C++中传参方式可分三种:值传递(传副本)、指针传递(传地址)、引用传递(传别名)。

  (1)值传递:其实是一种赋值操作,实参传递给形参时会产生额外的副本,形参只是实参的拷贝,所以函数内对形参的操作不会更新到源实参。在函数结束时,形参作为局部变量会被释放,对实参不会产生任何影响。若为类的对象会调用拷贝构造,这种深拷贝操作会影响到传参效率。(可理解为“单向接口”)

  (2) 指针传递:因为传递的是实参的地址,指针指向的内存中同一个对象,所以函数内部对形参得操作会“同步更新”到实参。(可理解为“双向接口”)

  (3)引用传递(C++特有):传递的是实参的别名,传参时形参被绑定到实参对象上,因此函数内部对形参的操作也都会“同步更新”到源实参。(可理解为“双向接口”)

  注:关于指针传递和引用传递,形参改变对实参的改变是一种副作用,我们利用这种副作用可以方便修改传递的实参,另外,这种方式避免了值传递中的拷贝,对于大数据的实参可以有效提升效率。因此,对于想提升传参效率又不想影响实参的情况,可以使用const:

  bool isShorter(const string &s1,const string &s2)//const修饰指针传参会有同样的效果

  {

  return s1.size()

  }//这也是为何在我们不想不修改实参时尽量使用const引用(指针)而不是值传递的原因。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议