首页 > 其他分享 > 111.在进行函数参数以及返回值传递时,可以使用引用或者值传递,其中使用引用的好处有哪些?

111.在进行函数参数以及返回值传递时,可以使用引用或者值传递,其中使用引用的好处有哪些?

时间:2023-07-12 21:34:05浏览次数:47  
标签:函数 形参 传递 函数参数 引用 返回值 实参

111.在进行函数参数以及返回值传递时,可以使用引用或者值传递,其中使用引用的好处有哪些?

对比值传递,引用传参的好处:

1)在函数内部可以对此参数进行修改

2)提高函数调用和运行的效率(因为没有了传值和生成副本的时间和空间消耗)

如果函数的参数实质就是形参,不过这个形参的作用域只是在函数体内部,也就是说实参和形参是两个不同的东西,要想形参代替实参,肯定有一个值的传递。函数调用时,值的传递机制是通过“形参=实参”来对形参赋值达到传值目的,产生了一个实参的副本。即使函数内部有对参数的修改,也只是针对形参,也就是那个副本,实参不会有任何更改。函数一旦结束,形参生命也宣告终结,做出的修改一样没对任何变量产生影响。

用引用作为返回值最大的好处就是在内存中不产生被返回值的副本。

但是有以下的限制:

1)不能返回局部变量的引用。因为函数返回以后局部变量就会被销毁

2)不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一 个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak

3)可以返回类成员的引用,但是最好是const。因为如果其他对象可以获得该属性的非常量的引用,那么对该属性的单纯赋值就会破坏业务规则的完整性。

参考资料来源:

阿秀

标签:函数,形参,传递,函数参数,引用,返回值,实参
From: https://www.cnblogs.com/codemagiciant/p/17548912.html

相关文章

  • 基本数据类型与引用数据类型
    从内存的角度去解释:基本数据类型:数据值是存储在自己的空间中特点:赋值给其他变量,也是赋的真实的值。引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值。特点:赋值给其他变量,赋的地址值。......
  • django 传递参数的方式
    1、view和url传递参数参数方式一:url.pypath('xxx/',MailTemplateList.as_view(),name='MailTemplateList'),path('xxx/<str:id>/',MailTemplateList.as_view(),name='MailTemplateList'),......
  • Java 中的值传递和引用传递 ?
    一.介绍值传递:值传递(Pass-by-Value)当我们向方法传递参数时,实际上是将该参数的值进行拷贝,并将拷贝后的值传递给方法内部。在方法内部对参数进行修改不会影响原始变量的值。引用传递:引用传递(Passbyreference)是指方法调用时实参(即传入方法的参数)是一个对象的引用,而不是......
  • 【C++学习笔记——前置声明:解决嵌套引用问题】
    在代码中,两个类相互引用的问题,那么我们就需要在头文件中相互写#include,这样会造成相互循环cpoy头文件,编译器报错,为了解决这个问题,设置了前置声明这个方法。A.h#ifndefA_H#defineA_HclassBclassA{typedefvector<string>::sizetypesize_type;B*b;}#endifB.h#if......
  • 前端Get请求传递时间参数报错
    Get请求时,传递的参数都属于字符串类型,若是这个时候后端是用Date类型接收,会出现数据类型不匹配的问题(@DateTimeFormat(pattern="yyyy-MM-dd")注解可自动将前端传来的字符串转换成时间类型,不过前端传来的长度要大于pattern设置的格式~)@DateTimeFormat(pattern="yyyy-MM-dd")......
  • 106.你什么情况用指针当参数,什么时候用引用,为什么?
    106.你什么情况用指针当参数,什么时候用引用,为什么?1.使用引用参数的主要原因有两个1.程序员能修改调用函数中的数据对象2.通过传递引用而不是整个数据–对象,可以提高程序的运行速度2.一般的原则1.对于使用引用的值而不做修改的函数:(1)如果数据对象很小,如内置数据类型或者小型结......
  • 80.继承机制中对象之间如何转换?指针和引用之间如何转换?
    80.继承机制中对象之间如何转换?指针和引用之间如何转换?1.向上类型转换将派生类指针或引用转换为基类的指针或引用被称为向上类型转换,向上类型转换会自动进行,而且向上类型转换是安全的。2.向下类型转换将基类指针或引用转换为派生类指针或引用被称为向下类型转换,向下类型转换不......
  • 77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?
    77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?1.指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。值传......
  • vue3中父组件与组件之间参数传递,使用(defineProps/defineEmits),涉及属性传递,对象传递,
    Vue3中子父组件之间的通信一、父组件传递参数到子组件采用defineProps传递属性父组件:<template><div><h1>这是父组件</h1><h1>父组件像子组件传递参数</h1><h2>传递属性值</h2><HH:fatherMessage="fatherMessage":valNum="valNum":valBool=......
  • abc074d <Floyed 消除传递边>
    D-RestoringRoadNetwork//https://atcoder.jp/contests/abc074/tasks/arc083_b//<Floyed>//1.跑一边floyed检查是否有边被更新,从而判断是否A中所有都为最短路//2.在Floyed过程中,记录被更新的边a[i][j],这些边是传递产生的边,没有必要//(想到了离散数学中......