今天研究了下sizeof,复习了下各个类型的大小。顺便把之前一直不明白的类的一些东西搞清楚了。
#include <stdio.h> enum eEnum {TXT, JPG}; class CA { public: virtual void fV(){}; protected: private: }; class CB { public: void f(){}; protected: private: }; class CC { public: void f(){}; virtual void fV(){}; protected: private: }; class CD { public: static int a; protected: private: }; class CE { public: protected: private: }; int main() { eEnum eA = TXT; char chChar = 0; short nShort = 0; int nInt = 0; long lLong = 0; float fFloat = 0; double dDouble = 0; int nSize = sizeof(eA); //4 nSize = sizeof(chChar); //1 nSize = sizeof(nShort); //2 nSize = sizeof(nInt); //4 nSize = sizeof(lLong); //4 nSize = sizeof(fFloat); //4 小数点后位数少 nSize = sizeof(dDouble); //8 小树点后位数多 CA a; nSize = sizeof(a); //4 虚函数指针 占4字节 CB b; nSize = sizeof(b); //1 普通函数为各实例公有,所以不计入size CC c; nSize = sizeof(c); //4 虚函数指针 占4字节 普通函数为各实例公有,所以不计入size CD d; nSize = sizeof(d); //1 static变量不计入size,因为所有实例只有一个static变量,静态成员是类的所有对象中共享的成员 CE e; nSize = sizeof(e); //1 空类 什么都没有 但是实例得分配空间 所以大小是1 return 0; }
比较有趣的是类的部分。
-
普通函数,因为是各个实例共有的,所以不计入size;
-
虚函数,因为会有一个指针,所以会占4个字节的大小;
-
空类,即使什么都没有,也要占1个字节的大小,因为空类实例化的时候也要分配空间;
-
static变量,是所有实例共享的,所以不计入size。
-
至于还有成员变量的,一般就加上这个成员变量的大小就行了。