首页 > 其他 > 详细

面试题:const、static、sizeof

时间:2014-02-26 23:51:00      阅读:678      评论:0      收藏:0      [点我收藏+]

#include <iostream>
using namespace std;

class A{
public:
	mutable int m;
	
	int f()const{
		return ++m;
	}
	A(int i):m(i){}
};

int main(){
	A a(0);
	cout<<a.f();
    return 0;
}

const自不必多少,可以定义常量、修饰函数参数、修饰函数返回值等,c++中还可以修饰函数的定义体,定义类中某成员函数为恒态函数

这里介绍下我们忽略掉的mutable,mutable就是为了突破const限制而设置的

2、sizeof和static

1、sizeof

#include <iostream>
using namespace std;

class A{
	bool a;
	int b;
	bool c;
};
class B{
	int a;
	bool b;
	bool c;
};
int main(){
	printf("%d\n",sizeof(A));
	printf("%d\n",sizeof(B));
    return 0;
}

输出结果为12和8,为什么不同?

这是因为编译器进行了数据对齐处理

对于A:

|bool|----|----|----|

|----------int-------|

|bool|----|----|----|

对于B:

|----------int---------|

|bool|bool|----|----|

所以A占12字节,B占8字节

2、static

#include <iostream>
using namespace std;

class A{
	int a;
	static int b;
};
class B{
	int a;
	char b;
};
class C{
	float a;
	char b;
};
class D{
	float a;
	int b;
	char c;
};
class E{
	double a;
	float b;
	int c;
	char d;
};
int main(){
	printf("%d\n",sizeof(A));//4
	printf("%d\n",sizeof(B));//8
	printf("%d\n",sizeof(C));//8
	printf("%d\n",sizeof(D));//12
	printf("%d\n",sizeof(E));//24
    return 0;
}

static存放在全局数据区,sizeof计算栈中分配的大小,所以是4

对于E:因为double长度为8字节,对齐模数(在windows中就是其长度)为8,所以大小为8的整数倍

|----|----|----|----|----|----|----|----|

|----float--------|--------int--------|

|--char-|----|----|----|----|----|----|

为24字节

3、

#include <iostream>
using namespace std;

class A{
	int a;
	static int b;
	virtual void f(){};
	virtual void f2(){};
	void g(){}
};
class B{

};
class C:public B{

};
int main(){
	printf("%d\n",sizeof(A));//8
	printf("%d\n",sizeof(B));//1
	printf("%d\n",sizeof(C));//1
    return 0;
}

对于A:输出为8,包含int a的4字节和虚表指针的4字节,成员函数不占空间

B:空类需占1字节

C:继承类空类也需占1字节

面试题:const、static、sizeof,布布扣,bubuko.com

面试题:const、static、sizeof

原文:http://blog.csdn.net/starcuan/article/details/19933585

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!