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

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

https://blog.csdn.net/ta893115871/article/details/7995280

原创 2012年09月19日 11:46:46

 

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

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

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

 看个例子:

[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. }  


 

版权声明
 
posted @ 2018-04-02 17:39  sky20080101  阅读(143)  评论(0)    收藏  举报