回 帖 发 新 帖 刷新版面

主题:c++中的类到底占不占内存的?

#include<iostream>
using namespace std;
class Time
{
 int year;
 int month;
 int day;
};

int main()
{
 cout<<sizeof(Time)<<endl;
 return 0;


书上说,类是对象的模板,对象是类的实例。类是抽象的,不占用内存,而对象是具体的,占用储存空间。
可是这个程序,并没有为类指定一个对象,却输出该类所占的字节数为12;
我试过了,如果为类指定一个对象
Time t1;
最后sizeof(t1)也是12.
这是为什么?

回复列表 (共7个回复)

沙发

这和你调用
sizeof(int)
sizeof(long)
sizeof(float)
sizeof(double)
.............
是一个道理

板凳

sizeof是指它的大小,而不能代表它占用了空间。
就相当于说:本数据表的某字段大小为12个字节,但它没有数据时也是不占用表的数据空间的。

3 楼

不得不跟你们普及一下语法知识了,sizeof不是个函数,是个运算符跟+,-一样,你调用sizeof int,这样也是正确的。sizeof后面的类型是在编译时候就确定好了的。Time t1;sizeof(t1)t1的类型就是Time,在编译时就确定了的。比如你int i = 0;int j = sizeof(++i),很多人认为执行完后i = 1,其实i是等0的,因为sizeof是在编译时候就确定了好了类型,不是在运行时,++i的类型就是int,int j = sizeof(++i) 等价于int j = sizeof(int)。
不得不纠正留住一点,精确的讲sizeof得出的类型的大小,而不是你对象占用多少内存!!!

4 楼

谢谢各位了。

5 楼

很占内存了





















signature----------------------------------------If you make yourself an ass, don't complain if people ride you.[url=http://www.freerunkicks.com/nike-lunarglide-2-c-56.html]nike lunarglide 2[/url] [url=http://www.freerunkicks.com/nike-lunarglide-3-c-57.html]nike lunarglide 3[/url] [url=http://www.freerunkicks.com/nike-air-max-2011-c-53.html]nike air max 2011[/url] [url=http://www.freerunkicks.com/nike-air-max-2012-c-62.html]nike air max 2012[/url]

6 楼

学习了!

7 楼


学习了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册