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,函数定义前后类型不一致),系统会报错,解决办法为函数前面定义。