一、C++类静态成员初始化
C++类静态成员包含静态成员方法与静态数据成员,下面主要介绍静态数据成员的初始化
1、类静态数据成员声明与定义
当数据成员被声明为
static
时,只会为类的所有对象保留一个数据副本。静态数据成员不是给定的类类型的对象的一部分。 因此,静态数据成员的声明不被视为一个定义。 在类范围中声明数据成员,但在文件范围内执行定义。 这些静态类成员具有外部链接,示例如下:
class Base
{
private:
// 在类内部声明静态数据成员
static int m_count;
static Base m_base;
public:
Base(){}
};
// 在类外部定义静态数据成员,分配内存
Base Base::m_base;
int Base::m_count = 10;
注意:在类外部定义静态数据成员时,不能使用
static
关键字,不然会报错。
2、静态数据成员的类内初始化
如果要在类内部初始化类静态成员,可以使用下面两种方法
- 使用inline在类内部初始化且分配内存(C++17)
- 只能给静态成员提供const类型的类内初始值
class Base
{
private:
// 在类内部初始化static const成员
static const int MAX_NUM = 20;
public:
Base(){}
};