c++学习笔记(1)--有关sizeof的问题

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

sizeof的总结:

基本类型:

sizeof(bool)=1;

sizeof(char)=1;

sizeof(short)=2;

sizeof(long)=4;

sizeof(int)=4;

sizeof(float)=4;

sizeof(double)=8;

sizeof(string)=16;

sizeof(vector<elemType>)=16;

元素类型为T,个数为n的数组array:

sizeof(array)=n*sizeof(T);

指针和引用:

sizeof作用于指针变量时,结果总是为4,而作用于引用变量时,结果等于所引用的变量的size。如:

double a; double* b=&a; double& c=a;

则sizeof(b)=4;sizeof(c)=8。

类:

1)无父类的类 : 其size原则上等于其非静态成员变量的size之和:

class CTest1{

public:

int a,b

static double c;

double d;

};

sizeof(CTest1)=sizeof(a)+sizeof(b) +sizeof(d)=4+4+8=16;

为什么说原则上等于呢?因为变量只能在内存中一个字的开头存储,所以定义成员变量的顺序可能会影响到类的size,如将上面的CTest1改为

class CTest2{

public:

int a;

static double c;

double d;

int b;

};

sizeof(CTest2)=24; 可以看出类中成员变量的定义顺序会影响到内存的利用率,这是跟编译器的对齐方式有关。

2)派生类:需要加上其基类的size

class CTest3:CTest1{

public:

int e;

}; sizeof(CTest3)=24

3)class CTest4{}; //sizeof(CTest4)=1

class CTest5{virtual ~CTest5(){}};//sizeof(CTest5)=4

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航