/*
https://ac.nowcoder.com/questionTerminal/61292be7140043609abfdd5e9624cca4?orderByHotValue=1&page=1&onlyReference=false
*/
#include<bits/stdc++.h>
using namespace std;
class A{//空类
};
class A1{//虚函数
virtual void fun(){}
};
class A2{//静态成员和普通函数
static int a(){}
int b(){}
};
void test00(){
/*
空类的大小是1,在C++中空类会占用1个字节,这是为了让对象的实例能够相互区别。具体来说,空类同样可以被实例化
,并且每个实例在内存中都有独一无二的地址,因此,编译器会给空类隐含加上一个字节,这样空类实例化后就会拥有独一无二
的内存地址。当该空白类作为基类时,该类的大小就优化为零了,子类的大小就是子类本身的大小。这就是所谓的空白基类最优化。
空类的实例大小就是类的大小,所以sizeof(a)=1字节,如果a是指针,则sizeof(a)就是指针的大小
*/
cout<<sizeof(A)<<endl;
A a;
cout<<sizeof(a)<<endl;
A*pa;
cout<<sizeof(pa)<<endl;
}
void test01(){
/*
对于虚函数,在64位机器上为8,因为有虚函数的类对象中都有一个虚函数表指针,其大小是8字节
*/
cout<<sizeof(A1)<<endl;
A1 a;
cout<<sizeof(a)<<endl;
A1*pa;
cout<<sizeof(pa)<<endl;
}
void test02(){
/*
静态成员存放在静态存储区,不占用类的大小,普通函数也不占用类的大小
*/
cout<<sizeof(A2)<<endl;
A2 a;
cout<<sizeof(a)<<endl;
A2*pa;
cout<<sizeof(pa)<<endl;
}
int main(){
test02();
system("pause");
return 0;
}