C++类大小

对于C++中类的大小,主要针对于无成员的空类大小,编译器会对该类进行优化,情况主要分为是否有虚表(虚函数)两种类型,对于无虚函数的类,该类大小均为1个字节(编译器插入一个char表示该类的存在),而出现虚函数的类,该类大小为虚表指针大小4个字节(32位系统)。如出现继承,情况又不一样,不同编译器有不同的处理方法,可通过下面代码进行测试:

#include <iostream>

using namespace std;

class X {};
class Y:public virtual X {};
class Z:public virtual X {};
class A:public Y,Z {};

class C:public X{};
class D:public X{};
class E:public C,D {};

typedef float usize;
int x = 5;
class B {
public:
	typedef unsigned long usize;
	B(usize v):value(v),x(0.0f) {}
	float X() const {return x;}
private:
	//typedef unsigned long usize;
	usize value;
	float x;
};

int main(int argc, char *argv[]) {
	B b(10);
	cout << "X:" << sizeof(X) << endl;
	cout << "Y:" << sizeof(Y) << endl;
	cout << "Z:" << sizeof(Z) << endl;
	cout << "A:" << sizeof(A) << endl;
	cout << "E:" << sizeof(E) << endl;
	cout << "b:" << b.X() << endl;
	return 0;
}

在gcc4.7中结果如下:

test_size
X:1
Y:4
Z:4
A:8
E:2
b:0

VS2013上运行结果如下:

test_size
X:1
Y:4
Z:4
A:8
E:1
b:0

在函数声明时,编译器会对函数中参数类型进行验证,当前后类型不一致时(如上面实例中的usize,函数定义前后类型不一致),系统会报错,解决办法为函数前面定义。  

posted on 2015-07-16 13:12  kkford  阅读(219)  评论(0编辑  收藏  举报

导航