函数返回引用1

转载自:http://blog.csdn.net/ta893115871/article/details/7995280


可以把函数定义为引用类型,这时函数的返回值即为某一变量的引用(别名),因此,它相当于返回了一个变量,所以可对其返回

值进行赋值操作。这一点类同于函数的返回值为指针类型。 由于函数调用返回的引用类型是在函数运行结束后产生的,所以函数不

能返回自动变量和形参。返回的变量的引用,这个变量必须是全局变量或静态局部变量,即存储在静态区中的变量。

 看个例子:

[cpp]  view plain  copy
  1. /* 
  2.  * main.cpp 
  3.  * 
  4.  *  Created on: 2012-9-18 
  5.  *      Author: china 
  6.  * 
  7.  *      注意:由于函数调用返回的引用类型是在函数运行结束后产生的,所以函数不能返回自动变量和形参。 
  8.         返回的变量的引用,这个变量必须是全局变量或静态局部变量,即存储在静态区中的变量。 
  9.  * 
  10.  */  
  11. #include <iostream>  
  12. using namespace std;  
  13.   
  14. int a = 4;  
  15. //函数返回a的引用,即a的别名!!!!  
  16.   
  17. int &f(int x) {  
  18.     //static int a=4;   和全局变量的效果一样哦  
  19.     a = a + x;  
  20.     return a;  
  21. }  
  22.   
  23. int main(int argc, char **argv) {  
  24.   
  25.     int t = 5;  
  26.     cout << f(t) << endl;//输出  9    (a=9)  t=5  
  27.     f(t) = 20;//先调用,再赋值  a=20    t=5  
  28.     cout << f(t) << endl;//输出25  (a=25)    t=5  
  29.     t = f(t);//先调用,再赋值   a=30,t=30  
  30.     cout << f(t) << endl;//60  
  31.   
  32.     return 0;  
  33. }  


 

(二):我们都知道,函数作为一种程序实体,它有名字、类型、地址和存储空间,一般说来函数不能作为左值(即函数不能放在

赋值号左边)。但如果将函数定义为返回引用类型,因为返回的是一个变量的别名,就可以将函数放在左边,即给这个变量赋值。

eg:

[cpp]  view plain  copy
  1. eg:/* 
  2.  * main.cpp 
  3.  * 
  4.  *  Created on: 2012-9-18 
  5.  *      Author: china 
  6.  * 
  7.  *      我们都知道,函数作为一种程序实体,它有名字、类型、地址和存储空间, 
  8.  *      一般说来函数不能作为左值(即函数不能放在赋值号左边)。但如果将函数定义为返回引用类型, 
  9.  *      因为返回的是一个变量的别名,就可以将函数放在左边,即给这个变量赋值。 
  10.  * 
  11.  */  
  12.   
  13. #include <iostream>  
  14. using namespace std;  
  15. int &f(int &x);  
  16. int main(int argc, char **argv) {  
  17.   
  18.     int a=3;  
  19.     cout<<f(a)<<endl;//a=4,输出3  
  20.     f(a)=20;//先调用后赋值a=5  
  21.     a+=5;//a=10  
  22.     cout<<f(a)<<endl;//10  
  23.     a=f(a);//a=11,先调用后赋值  
  24.     cout<<f(a)<<endl;//11,a=12  
  25.   
  26.     return 0;  
  27. }  
  28. int &f(int &x)  
  29. {  
  30.   static int t=2;  
  31.   t=x++;  
  32.   return t;  
  33. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值