13.请说一下以下几种情况下,下面几个类的大小各是多少?

13.请说一下以下几种情况下,下面几个类的大小各是多少?

class A {};
int main() 
{
	cout << sizeof(A) << endl;// 输出 1;
	A a;
	cout << sizeof(a) << endl;// 输出 1;
	return 0;
}

空类的大小是1, 在C++中空类会占一个字节,这是为了让对象的实例能够相互区别。具体来说,空类同样可以被实例化,并且每个实例在内存中都有独一无二的地址,因此,编译器会给空类隐含加上一个字节,这样空类实例化之后就会拥有独一无二的内存地址。当该空白类作为基类时,该类的大小就优化为0了,子类的大小就是子类本身的大小。这就是所谓的空白基类最优化。

空类的实例大小就是类的大小,所以sizeof(a)=1字节,如果a是指针,则sizeof(a)就是指针的大小,即4字节。

class A 
{
	virtual void Fun() {} 
};
int main() 
{
	cout << sizeof(A) << endl;// 输出 4(32位机器)/8(64位机器);
	A a;
	cout << sizeof(a) << endl;// 输出 4(32位机器)/8(64位机器);
	return 0;
}

因为有虚函数的类对象中都有一个虚函数表指针 __vptr,其大小是4字节,64位机器8字节

class A { static int a; };
int main() 
{
	cout << sizeof(A) << endl;// 输出 1;
	A a;
	cout << sizeof(a) << endl;// 输出 1;
	return 0;
}

静态成员存放在静态存储区,不占用类的大小,普通函数也不占用类大小

class A { int a; };
int main() 
{
	cout << sizeof(A) << endl;// 输出 4;
	A a;
	cout << sizeof(a) << endl;// 输出 4;
	return 0;
}
class A
{ 
	static int a; 
	int b; 
};
int main() 
{
	cout << sizeof(A) << endl;// 输出 4;
	A a;
	cout << sizeof(a) << endl;// 输出 4;
	return 0;
}

静态成员a不占用类的大小,所以类的大小就是b变量的大小即4个字节

posted @ 2023-08-02 22:00  CodeMagicianT  阅读(18)  评论(0编辑  收藏  举报