为什么static数据成员一定要在类外初始化?

1.避免重复定义和初始化

成员变量只被定义一次的好方法。

那么,是否可以这样理解:

的,那程序就不会再去试图初始化了。

而且,<<c++ primer>>说static const int也必须在类外定义,类里面的只是声明和初始化(但是linux下用GCC试的结果是

:不用在类外定义也完全可以,gcc version 3.4.6)。

2.满足C++的static语意

这里的语意,应该就是1中说的意思了吧

只有const没有static的话,类的每个object都有这个const变量,也不能在类的数据成员声明的时候一起初始化了,只能在构造函数的初始化列表里初始化。

//下面是网上看到的内容:

+++++++++++++++++++++++++

#include <iostream.h> class CDummy { public: static int n; //这里只是声明}; int CDummy::n=9; //这里是定义加初始化void main() { cout < <CDummy::n < <endl; } 上面这样完全没问题,但是不能直接在类中初始化,比如: static int n=9; +++++++++++++++++++

为什么static成员一定要在类外初始化? 这是因为被static声明的类静态数据成员,,其实体远在main()函数开始之前就已经在全局数据段中诞生了(见《Inside The C++ Object Model》page247)!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?难道类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗? 所以我的朋友,为了满足C++的static语意,static成员一定要在类外初始化!

版权声明:本文为博主原创文章,未经博主允许不得转载。

世界上那些最容易的事情中,拖延时间最不费力。

为什么static数据成员一定要在类外初始化?

相关文章:

你感兴趣的文章:

标签云: