引用作为函数的返回值——原版

1、引用作为函数的返回值时,必须在定义函数时在函数名前将&

2.用引用作函数的返回值,的最大的好处是在内存中不产生返回值的副本

float temp;
float fn1(float r){temp=r*r*3.14;return temp;
}
float &fn2(float r){ //返回引用temp=r*r*3.14;return temp;
}
int main()
{float a=fn1(5.0); //case 1:返回值//float &b=fn1(5.0); //case 2:用函数的返回值作为引用的初始化值float c=fn2(5.0);//case 3:返回引用,返回引用的方式调用函数float &d=fn2(5.0);//case 4:返回引用,作为新引用的初始化值//temp是全局变量,所以在d的有效期内temp始终保持有效
}

3.不能返回局部变量的引用。

case 4 ,如果temp是局部变量,那么它会在函数返回后被销毁,此时对temp的引用就会成为“无所指”的引用,程序会进入未知状态。

4.不能返回函数内部通过new分配的内存的引用。

虽然不存在局部变量的被动销毁问题,但如果被返回的函数的引用只是作为一个临时变量出现,而没有将其赋值给一个实际的变量,那么就可能造成这个引用所指向的空间(有new分配)无法释放的情况(由于没有具体的变量名,故无法用delete手动释放该内存),从而造成内存泄漏。因此应当避免这种情况的发生

string& foo()//去掉引用就可以
{string* str = new string("abc");
return *str;//非法
}

返回的引用是new分配的对象,只是作为一个临时变量出现(是可以的),而没有将其赋值给一个实际的变量,引用所指向的空间无法释放的情况

临时变量

C++ 中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量。

函数返回值

1 string proc()
2 {3     return string("abc");
4  }
5
6 int main()
7 {//表达式完成后,就被销毁
8     proc();//没有通过引用,就会出现临时变量,
9     return 0;
10 }

类型转换

1 int a = 3;
2
3 float k = 2.0;
4 float f = k + a;表达式完成后,就被销毁

生存周期延长

初始化引用
第 8 行产生的临时变量因为有 ref 指向,临时变量的生命周期就会被延长至直到 main() 返回,直到引用被销毁

 1 string Proc()2 {3      return string("abc");4 }5  6 int main()7  {8      const string& ref = Proc();9      cout << ref << endl;
10      return 0;
11  }

5当返回类成员的引用时,最好是const引用。

这样可以避免在无意的情况下破坏该类的成员。

6.可以用函数返回的引用作为赋值表达式中的左值

int value[10];
int error=-1;int &func(int n){if(n>=0&&n<=9)return value[n];//返回的引用所绑定的变量一定是全局变量,不能是函数中定义的局部变量 elsereturn error;
}int main(){func(0)=10;}
10
12

引用作为函数的返回值相关推荐

  1. C/C++ 引用作为函数的返回值

    语法:类型 &函数名(形参列表){ 函数体 } 特别注意: 1.引用作为函数的返回值时,必须在定义函数时在函数名前将& 2.用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本 ...

  2. C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

    然后我们再去看,要注意不要反悔局部变量的引用什么意思? 比如这里我有个方法,test01,他返回了一个int a =10; 这个变量的引用,而a这个变量是个局部变量. 这个时候我们去用一个引用,接收这 ...

  3. c++为什么不能用局部变量的指针或者引用作为函数的返回值

    函数的调用以及完成调用的过程是函数在栈内存中入栈和出栈的过程,当函数被调用 时,函数入栈,当函数调用完成之后,系统负责把函数占用栈内存自动释放,所以存在 栈中的局部变量的占用的内存得到释放,如果此时把 ...

  4. python函数的返回值是返回引用吗_python-函数(上):函数返回值、函数调用、前向引用...

    编程方法: 1.面向对象:类--class 2.面向过程:过程--def 3.函数式编程:函数--def #python中函数#函数的定义#打印一个佛祖镇楼 -> 一个功能点的解释 defpri ...

  5. 【php7扩展开发四】函数的参数 ,引用传参 ,返回值

    函数参数解析 之前我们定义的函数没有接收任何参数,那么扩展定义的内部函数如何读取参数呢?用户自定义函数在编译时会为每个参数创建一个zend_arg_info结构,这个结构用来记录参数的名称.是否引用传 ...

  6. 引用之函数返回值 函数的返回值为引用类型《三》

    一: 可以把函数定义为引用类型,这时函数的返回值即为某一变量的引用(别名),因此,它相当于返回了一个变量,所以可对其返回 值进行赋值操作.这一点类同于函数的返回值为指针类型. 由于函数调用返回的引用类 ...

  7. 在c语言中怎么返回引用参数,C语言函数 函数的声明 C语言的头文件 #include的用法 形参和实参 函数的返回值 - 猫扑天空...

    C语言函数 一.是什么? 是指编程中对一块功能代码的封装,可以理解一个程序片段 二.有什么用? 可以封装代码,方便调用,提高复用性 三.怎么用? 定义:  返回值类型  函数名(形参类型 参数名1-. ...

  8. Qt 使用C++特性“引用” - 获得槽函数的返回值

    QT信号与槽中,槽函数是可以定义有返回值的,但是我们都是在connect函数中进行调用,那么该如何获得调用后的槽函数的返回值呢? 答案是不可能获得了的! 槽函数虽然可以定义返回值类型,但其实他和信号一 ...

  9. C++知识点8——函数的返回值

    函数的返回值不能是数组或函数,但是可以是是数组和函数的指针或引用 函数返回一个值的过程和初始化完全一致,先创建一个临时变量,用返回值初始化该临时变量,然后用该临时变量去初始化另一个变量或者给另一个变量 ...

最新文章

  1. 086.冒泡排序的缺点及解决方案
  2. 第二次 图书助手冲刺第一天
  3. 用substr()函数高效的输出一个字符串的所用子串
  4. java返回属性_java – 根据对象属性确定哪个枚举返回
  5. 【C++ Priemr | 15】虚函数表剖析(三)
  6. 吴恩达作业9:卷积神经网络实现手势数字的识别(基于tensorflow)
  7. 河北四部门联合打击虚开骗税违法行为
  8. priority_queue用法
  9. Vue路由SPA介绍
  10. 【Java项目】社区论坛项目
  11. vant vant-list碰到的坑
  12. switch...case语句
  13. 从 Debian 10 (Buster) 升级到 Debian 11 (Bullseye)
  14. 基于微信小程序的社区垃圾回收管理系统小程序
  15. c语言,简易密码输入
  16. PHP 根据文字内容添加图片上实现自动换行的小程序
  17. java数据库规范化,数据库关系模式规范化
  18. Java JNA (三)—— 结构体使用及简单示例
  19. 微信小程序使用身份证识别
  20. 什么是 event.target ?

热门文章

  1. 毕业5年,腾讯65万,拿到美团、滴滴、快手、阿里offer多少钱
  2. linux+记账软件下载,快速记账软件下载-快速记账appv3.11.0-Linux公社
  3. SparkGraphX快速入门
  4. 【​观察】纺织印花行业转型与升级提速 爱普生蒙娜丽莎掀起技术迭代革命...
  5. 运动蓝牙耳机什么牌子好?性价比高的无线蓝牙耳机
  6. 2020-10-24 车机UI的SystemUI修改
  7. [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.1
  8. 获取iframe里面的数据
  9. 长短信实现系列之电信SMGP3.0
  10. Android 手机拨号