类静态成员初始化、赋值
类静态成员类外初始化与在另一个类成员函数赋值
为什么类的静态成员要在类外初始化
因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。
C++的静态成员是需要初始化的(实际上需要分配一个内存,不一定需要赋值),初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义。 静态成员是单独存储的,并不是对象的组成部分。如果在类的内部进行定义,在建立多个对象时会多次声明和定义该变量的存储位置。在名字空间和作用于相同的情况下会导致重名的问题。
- 静态常量成员可以在类内初始化
类的静态成员变量在另一个类赋值
//头文件代码 a.h
class SPostMsgToMain
{
public:
//存储消息线程的指针
static CWinThread* m_pThread;
};
//a.cpp
SPostMsgToMain::m_pThread=NULL; //此处为静态成员的定义。该定义要写在实现文件里面,不能写在头文件里面
//thread.cpp
QueryThread::QueryThread(void)
{
SPostMsgToMain::m_pThread = this;
}
Re:
https://blog.csdn.net/sevenjoin/article/details/81772792
https://blog.csdn.net/lvquanye9483/article/details/81946116
下面是09年已经删除的帖子,这是bing保存的快照: