/*
* - 空类的大小为1字节
* - 静态数据成员被编译器放在程序的一个global data mnembers中,它是类的一个数据成员,但不影响类的大小;不管这个类产生了多少个实例,
* 还是派生了多少新的类,静态数据成员只有一个实例;静态数据成员,一旦被声明,就已经存在。
* - 对于包含虚函数的类,不管有多少个虚函数,只有一个虚指针,vptr的大小。
* - 普通单继承,继承就是基类+派生类自身的大小(字节对齐)。
* - 虚单继承,派生类继承基类vptr
*/
#include<iostream>
using namespace std;
class A {};
class B // 4字节对齐,vptr大小为4
{
public:
char b;
virtual void fun() {};
static int c;
static int d;
static int f;
};
class C {
virtual void fun();
virtual void fun1();
virtual void fun2();
virtual void fun3();
};
class BD {
public:
char a;
int b;
};
/**
* @brief 此时B按照顺序:
* char a
* int b
* short a
* long b
* 根据字节对齐4+4=8+8+8=24
*/
class ED : public BD {
public:
short a;
long b;
};
class DC
{
A a;
char c;
};
class BA1
{
virtual void fun() {}
};
class ED1 :public BA1
{
};
int main()
{
cout << sizeof(A) << endl; // 1
cout << sizeof(B) << endl; // 8
cout << sizeof(C) << endl; // 4
cout << sizeof(BD) << endl; // 8
cout << sizeof(ED) << endl; // 16
cout << sizeof(DC) << endl; // 2
cout << sizeof(ED1) << endl; // 4
return 0;
}
c++ sizeof类大小
最新推荐文章于 2025-05-07 07:30:00 发布