#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; }
这里介绍下我们忽略掉的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; }
这是因为编译器进行了数据对齐处理
对于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; }
对于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
原文:http://blog.csdn.net/starcuan/article/details/19933585