| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1391 人关注过本帖
标题:[开源]有关static member 的 小测试 程序
只看楼主 加入收藏
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
 问题点数:0 回复次数:16 
[开源]有关static member 的 小测试 程序

code 如下:

#include<iostream>
using namespace std;

class X
{
int a;
static int b;
};

int X::b=0;

class Y
{
int a;
};

class Z
{
static int b;
};

int Z::b=0;

class WQ
{
};

int main()
{
cout<<"静态成员测试如下:"
<<"X size is: "<<sizeof(X)<<endl
<<"Y size is: "<<sizeof(Y)<<endl
<<"Wq size is: "<<sizeof(WQ)<<endl
<<"Z size is: "<<sizeof(Z)<<endl;
return 0;
}

由此可看出一个类不是空的,它占1个字节
静态成员 不在类中占分配空间, 普通成员在类中占有分配空间

搜索更多相关主题的帖子: static int member class 
2007-04-29 18:20
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 


空的类也占一个字节!

Fight  to win  or  die...
2007-04-29 21:40
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
class X
{ static int b;
int a;
char c;
};

这样呢?

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-04-29 22:47
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
收藏
得分:0 

首先说明以下是我的猜想,具体还请高手指点,说错了大家也别骂我呵
类在实例化之前不占内存吧
另外sizeof操作符从来不返回0,所以空类对象是否占一个字节还不能用sizeof来确定
The sizeof operator never yields 0, even for an empty class.(本句摘自MSDN)
还有就是如果一个空类真的占一个字节的话,那么
class X
{
int a;
static int b;
};
是不是应该占八个字节了但用sizeof试一下发现结果是4
class X
{ static int b;
int a;
char c;
};
这个用sizeof求了一下结果是8,也说明空类不占内存的呀


If you shed tears when you miss the sun, you also miss the stars.
2007-04-30 16:04
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
class X
{
int a;
static int b;
};
是不是应该占八个字节了但用sizeof试一下发现结果是4

这是不对的,应该知道,static变量 不是属于类的,所以它不在类中占内存,所以只能说是int占的字节 即4个字节

另外一个空类的大小不为0这是肯定的,如果是0的话你建立两个空对象的话怎么区分它们呢
这就是空类大小不为空的一个重要原因。
然后你说的这个用sizeof求了一下结果是8,也说明空类不占内存的呀
这个涉及到空基类的优化问题,具体请看这里http://bbs.bc-cn.net/viewthread.php?tid=76914

“运行正确”的程序不见得是高质量的程序
2007-04-30 16:12
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
以下是引用I喜欢c在2007-4-29 22:47:22的发言:
class X
{ static int b;
int a;
char c;
};

这样呢?

应该是5个吧

static 不在类中占内存,它在内存上不属于类,所以应该占5个,空基类优化了,空的那1个字节不计算在内。
我想是这样的


“运行正确”的程序不见得是高质量的程序
2007-04-30 16:15
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
收藏
得分:0 
static数据在类中不占内存我知道
class X
{ static int b;
int a;
char c;
};
其对象占八个字节内存,这是毫无疑问的,int 占四个字节,char 一个字节,但要考虑字节对齐,所以要有三个字节的填充位

[此贴子已经被作者于2007-4-30 16:30:58编辑过]


If you shed tears when you miss the sun, you also miss the stars.
2007-04-30 16:27
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 


谢谢楼上的指正,又长知识了,说的很对,要对齐才行。

“运行正确”的程序不见得是高质量的程序
2007-04-30 16:39
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
收藏
得分:0 

也非常感谢楼主给我提供一个这么好的帖子,正在学习中
http://bbs.bc-cn.net/viewthread.php?tid=76914


If you shed tears when you miss the sun, you also miss the stars.
2007-04-30 16:47
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 

恩~```
不错.....
大家说的很有道理

都学的不错嘛..LZ这种精神很值得大家学习呀~``


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-04-30 17:01
快速回复:[开源]有关static member 的 小测试 程序
数据加载中...
 
   



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

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