sizeof(空类)=?

jhon_zhi 2012-03-26 07:42:40
当一个类A 中没有声命任何成员变量与成员函数这时sizeof(A)的值是多少,如果不是零,请解释一下
编译器为什么没有让它为零。
...全文
543 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
HeFaQ123 2012-03-27
  • 打赏
  • 举报
回复
一般是1,反正就是比0大。空类肯定有空间。而这个空间又是什么都没有,但肯定比0大,一般都是1!
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
反正不是0
gengpei1234 2012-03-27
  • 打赏
  • 举报
回复
同意6楼。
参见Inside The C++ Object Model。
讲如何设计C++的。成为C++解决疑难杂症的高手必看的书。
menzi11 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jxnuzhouguohong 的回复:]

引用 2 楼 binghuazh 的回复:

编译器会给它一个字节,不然实例化的时候找不着地址


地址不是4个字节么?
[/Quote]

地址是4不妨碍sizeof是1啊,想想char
jxnuzhouguohong 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 binghuazh 的回复:]

编译器会给它一个字节,不然实例化的时候找不着地址
[/Quote]

地址不是4个字节么?
青霜无痕 2012-03-26
  • 打赏
  • 举报
回复
他要给这类一个位置空间 也就是他的地址
飞天御剑流 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 coolfeel123 的回复:]
当一个类A 中没有声命任何成员变量与成员函数这时sizeof(A)的值是多少,如果不是零,请解释一下
编译器为什么没有让它为零。
[/Quote]
这个问题不能简单地说空类大小是0还是不为0,要分情况。

当空类实例作为基类子对象时,大小允许为0(但不是一定为0);当空类实例作为最终派生对象时,大小至少为1(但不是一定为1,可以大于1,具体数值是实现定义的),目的是为了保持内存模型中的实体的地址唯一性。

详情请看:http://blog.csdn.net/supermegaboy/article/details/6858177
vanxeger 2012-03-26
  • 打赏
  • 举报
回复
这个只是一个标志,当你生成实例的时候要用的,不然这个类怎么存在呢?!
没有昵称阿 2012-03-26
  • 打赏
  • 举报
回复
反正不是0,具体大小这也和编译器的实现有关系。

这是为了确保不同对象有不同的地址。

可以参考《Inside C++ Object Model》
xiarui 2012-03-26
  • 打赏
  • 举报
回复
可能还和编译器有关,vc2010里面是1
JackBurd 2012-03-26
  • 打赏
  • 举报
回复
刚才试了一下,确实是1.貌似1L 和 2L 有道理。
Kaile 2012-03-26
  • 打赏
  • 举报
回复
不是0,可能是4个字节,因为编译器会为空类生成默认构造函数,拷贝构造函数,析构函数等。
blingpro 2012-03-26
  • 打赏
  • 举报
回复
编译器会给它一个字节,不然实例化的时候找不着地址
pathuang68 2012-03-26
  • 打赏
  • 举报
回复
通常是1,用作占位的。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧