sizeof class 详解(类的大小问题实验剖析)


类的大小问题实验剖析:


1、空类:C++编译器强制给这种类插入一个缺省成员,长度为1。如果有自定义的变量,变量将取代这个缺省成员。

class A

{};

cout<<sizeof(A); //输出1


2、只有一个char型

class A

{

char c;

};

cout<<sizeof(A); //输出1


3、有5个char型

class A

{

char a,b,c,d,e;

};

cout<<sizeof(A); //输出5


4、一个char型 + 一个int型:字节对齐

class A
{
char c;

int a;

};

cout<<sizeof(A); //输出8


5、2个char型 + 一个int型

class A

{

char c,d;

int a;

};

cout<<sizeof(A); //输出8


6、5个char型 + 一个int型

class A

{

char c,d,e,f,g;

int a;

};

cout<<sizeof(A); //输出12


7、1个char型 + 1个int型 + 2个char型

class A
{
char c;
int a;
char d,e;

};

cout<<sizeof(A); //输出12


8、普通函数不占空间

class A
{
void B(){ int d; }//0Byte
int C(){};

};

cout<<sizeof(A); //输出1,等同于空类


9、虚函数 占4个字节:指向虚函数表的指针

class A
{
virtual void C(){}
};

cout<<sizeof(A); //输出4


10、多个虚函数等同于1个虚函数

class A
{
virtual void C(){}

virtual void D(){}
};

cout<<sizeof(A); //输出4


11、多继承问题中sizeof

class b{};

class c :public b

{

virtual void fun() = 0;
};

class d :public b ,public c{};

cout<<sizeof(d); //输出8,字节对齐(b+c)


12、单继承问题中sizeof

class b{};

class c :public b

{

virtual void fun() = 0;

};

class d :public c{};

cout<<sizeof(c); //输出4

cout<<sizeof(d); //输出4


13、静态数据成员 和 成员函数 不占空间

class A

{

static int a;

static int b(){};

};

cout<<sizeof(A); //输出1


14、const数据变量占空间 和 const成员函数不占空间

class A

{

public:

const int b;

const int c;

virtual void f(){}

int d() const{}

int e() const{}

virtual void g(){}

A() :b(2), c(3)

{

}

};

cout<<sizeof(A); //输出12= 4+4+4(多个虚函数算一个)


总结:

1、不占空间的有:普通函数,静态数据成员,静态成员函数。

2、无论多少个,只相当于一个所占的空间:虚函数。

3、空类占1个字节。

4、既有字符型又有整型,要考虑字节对齐

5、普通数据成员、const数据成员占空间;静态成员不占空间。



以上是对类大小的实验,分享快乐,共同进步!




  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值