免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: HopeCao
打印 上一主题 下一主题

解析static! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-09-23 13:52 |只看该作者

解析static!

哇!好深奥呀!我是新手,(我很痛苦于现状)希望得到大家的帮助,谢谢:如果可能)请问您的信箱或者QQ号之类是多少(可以告诉吗?)我想……我的QQ是252914562 信箱是:ssyeew@citiz.net
我想真诚的和您交朋友!如果……还是谢谢!

您的问题,很抱歉,我是新手,无法帮您解决它,不过,我有一个问题请问您,谢谢回答我!!!

,检索出向某个供应商发出订购单的仓库所在城市,,....
我的是 ,(错误啦!):SELECT 城市 FROM仓库WHERE 订购单IN;
(CELECT订购单FROM订购单WHERE订购单="S4"
怎么改呀?谢谢!

论坛徽章:
0
12 [报告]
发表于 2007-02-27 14:51 |只看该作者
第六条我也是这么理解的,但是刚才在vc 6.0 以及gcc 环境下,static并没有起到控制的作用,即static 申明后仍然可以访问,怎么回事呢?

论坛徽章:
0
13 [报告]
发表于 2007-02-27 18:15 |只看该作者
补充一个有点意思的:函数中的静态成员,一定会在函数第一次被调用的时候初始化。这个性质看似没什么,其实能解决很重要的实际问题。在Exceptional C++中有说明。

是这样的,假如文件 a.c 中有全局变量 int a = 2,文件 b.c 中有全局变量 int b = a + 1。各自编译后,连接器无法决定哪个变量先初始化。我们希望当然是先初始化a,然后初始化b,而实际情况b的值是未定义的。

一个解决办法就是用到函数的静态成员:
在a.c中写一个函数 int get_a() {static int a = 2; return a;}
在b.c中改成 int b = get_a() + 1;
这样能解决问题是因为系统初始化 b 的时候要调用函数get_a(),而该函数的静态成员一定会在函数第一次调用的时候初始化,因此 b 就正确的被初始化为 a + 1.

[ 本帖最后由 emacsnw 于 2007-2-27 02:16 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2007-03-05 16:56 |只看该作者
好贴,仔细看看

论坛徽章:
0
15 [报告]
发表于 2007-03-13 15:26 |只看该作者
很基础的东西啊

论坛徽章:
0
16 [报告]
发表于 2008-10-13 14:53 |只看该作者
mark

论坛徽章:
0
17 [报告]
发表于 2008-10-13 22:46 |只看该作者
学习一下,马上面试了!

论坛徽章:
0
18 [报告]
发表于 2008-10-14 09:10 |只看该作者
很想知道函數靜態成員是怎么實現在第一次被調用時初始化的
還有inline的內部連接性,我記得在哪兒看到過被修改了。

论坛徽章:
0
19 [报告]
发表于 2008-10-14 12:35 |只看该作者
簡單試了試,int變量和普通static變量沒看出來區別。要么在.bss(初始為0)要么在。data中。也沒有實現所謂的函數第一次運行進行創建。。。頂多bss段可以在第一次訪問分配物理內存而已
類對象也是在bss段中的。只不過編譯器多給加了一個標志量,每次函數運行根據標記量判斷是否需要對該對象調用構造函數。。。。

论坛徽章:
0
20 [报告]
发表于 2008-10-15 22:22 |只看该作者
我在书上看到:
class test {
    public:
         int a;
         static test test_obj; //??
         char ch;
   //..............
};

在类没定义完整之前,不允许定义该类的对象,只能定义该类的引用或指针。这里定义了该类的静态对象,是怎样的一个原理呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP