原文出处:http://blog.youkuaiyun.com/zhouyelihua
我们知道在c++中const定义的变量一般是不分配内存的,和C语言中的#define。但是在c语言中const是默认分配的。
但是当我们的类中有const定义的数据时候,一般是要进行内存分配的。因为在const定义的变量一般是进行初始化操作的。不然就会报错。那什么时候对类中定义的变量进行初始化呢?
在类中定义const变量有以下两个好处:
1.静态数据成员没有进入程序的全局名字空间,因此不存在与程序中的其他全局名字冲突的可能性。
2.可以实现信息的隐藏。
- #include<iostream>
- using namespace std;
- class sb{
- private:
- const int i=5;
- public:
-
- void print();
- };
-
- void sb::print()
- {
- cout<<i<<endl;
- }
- int main()
- {
-
- cout<<"sizeof class sb="<<sizeof(sb)<<endl;
- sb sb1;
-
- sb1.print();
- return 0;
- }
上面的代码和下面的代码是一样的。下面的代码还节约内存
- #include<iostream>
- using namespace std;
- class sb{
-
-
- public:
-
- void print();
- };
-
- void sb::print()
- {
- cout<<5<<endl;
- }
- int main()
- {
-
- cout<<"sizeof class sb="<<sizeof(sb)<<endl;
- sb sb1;
-
- sb1.print();
- return 0;
- }
所以上面在类中直接定义是没有意义的。我们知道在类创立的时候我们最先执行的就是构造函数。但是是在构造函数中定义?这个也是错误的必须在构造函数体执行之前定义的,也就是在函数调用列表中定义的。具体如下
- #include<iostream>
- using namespace std;
- class sb{
- private:
- const int i;
- public:
- sb(int ii);
- void print();
- };
- sb::sb(int ii):i(ii){}
- void sb::print()
- {
- cout<<i<<endl;
- }
- int main()
- {
- sb sb1(1);
- cout<<"sizeof class sb="<<sizeof(sb)<<endl;
-
-
- sb1.print();
- return 0;
- }
而上文中的
如果改为
则会报错的。