注册 登录
编程论坛 C++教室

关于利用引用返回返回静态局部变量有点问题

shangke 发布于 2009-08-03 15:44, 1730 次点击
#include <iostream>
using namespace std;
int & func()
{
static int a; //静态局部变量a的生命周期是全局的
return a;//返回一个生命周期长于func函数执行期的变量
}
int main()
{
int &ra=func(); //ra为静态变量的别名
cout<<func()<<endl; //输出0 ,静态变量默认为0
func()+=8;     //作为左值使用
cout<<func()<<endl;//输出8
ra +=10;                  // 丧失了局部可见性
cout<<func()<<endl;//输出18
return 0;
}

代码中第3行的int & func() 是否是引用变量的定义?,我知道声明是需要绑定一个变量实体,这个我感觉像定义


在此先谢谢各位大牛了

[[it] 本帖最后由 shangke 于 2009-8-3 15:52 编辑 [/it]]
6 回复
#2
CrystalFan2009-08-03 15:50
你的意思是
第6行:return a;
吧?

[[it] 本帖最后由 CrystalFan 于 2009-8-3 15:51 编辑 [/it]]
#3
shangke2009-08-03 15:53
回复 2楼 CrystalFan
是的嘿嘿   第3行是定义吧
#4
CrystalFan2009-08-04 01:01
int & 应该还是表示 func() 函数的返回值类型是int型的引用

[[it] 本帖最后由 CrystalFan 于 2009-8-4 01:03 编辑 [/it]]
#5
CrystalFan2009-08-04 01:16
引用要绑定实体,这个实体是 int &ra=func(); 语句等号右边的值,即函数func()的返回值(也是一个引用,而这个引用每次调用时在return 语句中被初始化为静态变量a),
所以,ra的实体是a。
代码:
程序代码:

#include <iostream>
using namespace std;
int & func()
{
static int a; //静态局部变量a的生命周期是全局的
static int j;
printf("&a=%ld,&j=%ld\n",&a,&j);
return a;//返回一个生命周期长于func函数执行期的变量
}
int main()
{
int i;
int &ra=func(); //ra为静态变量的别名
printf("&ra=%ld,&i=%ld\n",&ra,&i);
cout<<func()<<endl; //输出0 ,静态变量默认为0
func()+=8;     //作为左值使用
cout<<func()<<endl;//输出8
ra +=10;                  // 丧失了局部可见性
cout<<func()<<endl;//输出18
return 0;
}

可以证明ra的实体是a。
#6
shangke2009-08-04 14:16
回复 5楼 CrystalFan
哦 我明白了非常谢谢您的指导
#7
CrystalFan2009-08-04 18:10
术业有专攻,我们取长补短,共同学习吧
1