/* 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; }