Dict.CN 在线词典, 英语学习, 在线翻译

学海苦作舟,书山勤为径

留下点回忆

常用链接

统计

积分与排名

Denoise

English study

Web技术

数据压缩

一些连接

最新评论

空结构体(类对于C++)的大小

类似代码:
typedef struct sD
{

}S_D;

int size_d  = sizeof(S_D);

那么size_d=?

如果这是一段C++代码,那么这里结果是1;看上去编译器为这样没有成员的结构体隐形定义了一个一字节(char)的成员,目的是为了能用来标识类实例之间的不同。
这里可以这样理解,如果没有这一个字节,那么所有结构体的实例都是空,也就不占内存,那么他们的实例是没有区别的,因此C++的编译器不允许这么做,从而隐式增加了一个字节。

另外对于class也是同样的(因此C++中struct和class关键字基本没有区别)。

那么如果这个代码是C代码,最后的size_d是多少?

posted on 2011-04-13 23:03 笨笨 阅读(2702) 评论(8)  编辑 收藏 引用 所属分类: C++

评论

# re: 空结构体(类对于C++)的大小 2011-04-14 00:01 polly

是0 C中应该没有此项功能  回复  更多评论   

# re: 空结构体(类对于C++)的大小 2011-04-14 09:17 千暮(zblc)

如果按你这样理解 1byte 只能区分256种实例 - -bnr ......

也就是最多只能有256个不同实例?我觉得这1byte不是用于这方面 而是因为C/C++任何类型必须有一个大小,不存在又是类型实例,又不占空间的类型实例。  回复  更多评论   

# re: 空结构体(类对于C++)的大小 2011-04-14 09:19 千暮(zblc)

@polly
我用的两种C编译器中也是1  回复  更多评论   

# re: 空结构体(类对于C++)的大小 2011-04-14 10:09 笨笨

@千暮(zblc)
你误解了。不是用一个字节value来区分,而是如果有了一个字节,实例就会有内存空间了,那么内存地址就会不同。。。。  回复  更多评论   

# re: 空结构体(类对于C++)的大小 2011-04-14 10:10 笨笨

@千暮(zblc)
我用的两种C编译器中也是1

那两种编译器,很想知道  回复  更多评论   

# re: 空结构体(类对于C++)的大小 2011-04-14 13:08 dawnless

这个问题thinking in c++提到过.
One of the fundamental rules of objects is that each object must have a unique address, so structures with no data members will always have some minimum nonzero size.  回复  更多评论   

# re: 空结构体(类对于C++)的大小 2011-04-14 15:04 千暮(zblc)

@笨笨
gcc、vs2010下的c编译,之后又在不同版本的tc、win-tc下编译了,还是1  回复  更多评论   

# re: 空结构体(类对于C++)的大小 2011-04-14 15:11 千暮(zblc)

@笨笨
哦 原来你是这个意思  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理