问一个菜鸟的问题;

yuyeshijie 2013-02-19 07:11:11
class A{};
int _tmain(int argc, _TCHAR* argv[])
{
int a = sizeof(A);
return 0;
}

为什么一个空类的sizeof不等于0?内存里面做了些神马?
...全文
317 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
RabinSong 2013-11-09
  • 打赏
  • 举报
回复
建议楼主看看,深度探索c++对象模型,这里面有为什么空类会占内存
安然 2013-02-25
  • 打赏
  • 举报
回复
引用 7 楼 rocktyt2 的回复:
1楼和6楼在胡扯
瞎扯。
zilaishuichina 2013-02-20
  • 打赏
  • 举报
回复
空类的默认大小是1
zslInSz 2013-02-20
  • 打赏
  • 举报
回复
有一本书专门深入讲解C++类内部模型的,《深度探索 C++ 对象模型》里面有详细的解释,一楼和六楼在瞎扯
清天灵月 2013-02-20
  • 打赏
  • 举报
回复
确实是1 长见识了!
青松2 2013-02-20
  • 打赏
  • 举报
回复
rocktyt 2013-02-20
  • 打赏
  • 举报
回复
1楼和6楼在胡扯
凤凰苑凶真 2013-02-20
  • 打赏
  • 举报
回复
sizeof函数不能计算类的大小吧
startservice 2013-02-20
  • 打赏
  • 举报
回复
引用 2 楼 wahaha_1986 的回复:
空类的默认大小是1,因为要保证正确的定义对象,如果空类的大小是0,那么A a;这个语句就会出错,对象既要存在,但是又没有占用存储大小就矛盾了,所以各个编译器就干脆把空类的大小定义为1的字节,这样就不会出现上述问题了。
++
dingqiang107 2013-02-20
  • 打赏
  • 举报
回复
标准只要求空类的大小不能为零,不过一般编译器都设成1. C++用不同地址来区别不同对象,如果空类大小为零,就会出现不同对象的地址相同。 A a1, a2; if (&a1 == &a2) //- 按标准,这个条件不应该成立 还有一个很好记的解释,假如定义了一个数组 A a[10],C++中可以用sizeof(a)/sizeof(A)来求数组大小,如果sizeof(A)=0,这个用法就会出问题。 但是,有一点很奇怪,零数组的大小确实为0,这样看起来不是空类,对象大小却为0! class B { char m[0]; }; typedef int C[0]; 这时sizeof(B)与sizeof(C)都是0.也许是因为这个缘故,C++标准不允许定义零数组,但是GCC中只给出警告,而不认为是个错误,后果自负。
wangeen 2013-02-19
  • 打赏
  • 举报
回复
++
引用 2 楼 wahaha_1986 的回复:
空类的默认大小是1,因为要保证正确的定义对象,如果空类的大小是0,那么A a;这个语句就会出错,对象既要存在,但是又没有占用存储大小就矛盾了,所以各个编译器就干脆把空类的大小定义为1的字节,这样就不会出现上述问题了。
wahaha_1986 2013-02-19
  • 打赏
  • 举报
回复
空类的默认大小是1,因为要保证正确的定义对象,如果空类的大小是0,那么A a;这个语句就会出错,对象既要存在,但是又没有占用存储大小就矛盾了,所以各个编译器就干脆把空类的大小定义为1的字节,这样就不会出现上述问题了。
唯恐天下不乱 2013-02-19
  • 打赏
  • 举报
回复
sizeof()不能计算类的大小

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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