| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:请教static问题
只看楼主 加入收藏
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
 问题点数:0 回复次数:9 
请教static问题
#include<iostream.h>
class c
{
public :
void set(int n){num=n;}
int get() const{return num;}
private:
int num;
};
void f(c&);
c& g();
void main()
{
c c1,c2;
f(c1);
c2=g();
cout<<c2.get()<<endl;
}
void f(c &d)
{
d.set(-999);
cout<<d.get()<<endl;
}
c& g()
{
static c c3;
c3.set(123);
return c3;
}
请问下:c& g();这句话是什么意思呢?而且static c c3;
这里非要用static,如果不用就输出错误,是为什么呢?
请教
搜索更多相关主题的帖子: static 
2006-05-30 21:08
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

c& g();这句话是什么意思呢? //返回c类型的引用(相当于指针)

而且static c c3;
这里非要用static,如果不用就输出错误,是为什么呢?
//因为如果不用static就是局部变量c3,作用域只在函数内,函数结束,就释放变量内存,返回的引用指向一个未知的地址!
而static就不会这样,他是静态的,不会因函数结束而释放,相当于全局变量~!


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-30 21:22
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
收藏
得分:0 
c& g();
是个函数申声.返回类型为class c的引用.

static c c3;
定义一个类c的静态对象,存储在数据区(静态存储区),不会因为某函数的结束而释放所在内存空间.
因为c& g();
这是个返回值为引用的的函数,你要记住:
一般函数返回都是新建临时变量而把return的value传给临时变量,再结束函数,再把临时变量值传递给接收函数返回的变量.
而这里不是一般函数,是一个引用作函数返回值的函数.而他就不同了,引用不产生副本的,而是直接把return的value返回给接收函数的变量.所以应 该避免返回值为局部变量.一般的要么是全局,要么是静态变量.因为这两种变量都不会因为函数的结束而释放这个变量的内存空间.(也就是他的值会一时存在)

这里你可以把static c c3;改为全局变量你试试? 一样可以.

E-mail/MSN: stylev@
2006-05-30 21:23
ooooo
Rank: 1
等 级:新手上路
威 望:1
帖 子:135
专家分:0
注 册:2005-6-24
收藏
得分:0 
wfpb 怎样理解
返回的引用指向一个未知的地址

2006-05-30 21:32
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 
那我可不可以这么理解,c&amp; g()返回的是c类的引用,如果不把c3设置为全局变量,那么c2=g();此时c2得到的不是对象c3的地址,而是g()这个函数的地址呢?
2006-05-30 22:51
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

不可以这么理解的,
你目前只要记住不要返回一个局部变量的引用就可以了,等有水平再深入理解


2006-05-30 22:57
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 
或者是这样的:由于返回的是一个地址,但此时c3已经已经没有用了,所以返回的是一个未知的地址给c2
2006-05-30 23:01
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 
不好意思,返回的是一个未知对象的地址传给c2
2006-05-31 11:05
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
以下是引用ooooo在2006-5-30 21:32:00的发言:
wfpb 怎样理解
返回的引用指向一个未知的地址

返回引用就是返回特殊的指针(可以看做是指针,局部变量被释放,也就是指针指向的内存被释放,这时,指针还存在,只是不知道他指向哪,所以指向未知地址)


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-31 11:32
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用lw8484654在2006-5-30 23:01:00的发言:
或者是这样的:由于返回的是一个地址,但此时c3已经已经没有用了,所以返回的是一个未知的地址给c2

返回被系统收回的地址.
如果有new建议在这基础上再写个拷贝构造函数


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-02 13:10
快速回复:请教static问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026328 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved