在 class 内部通过 static 修饰变量时,表示该变量为静态成员变量,必须在类外定义,静态成员变量的存储位于全局\静态存储区,访问时通过“类名::变量名”方式访问该静态成员变量。
例:
// .h
class VehicleDensityController
{
public:
static double m_Count;
};
// .cpp
double VehicleDensityController::m_Count;
在 class 内部通过 static const 修饰变量时,表示该变量为静态成员常量,可以在类内初始化,或者在类外初始化。
在 class 内部通过 static constexpr 修饰变量时,表示该变量为静态成员常量,必须在类内初始化,并要求编译期间的其它常量来初始化该常量。
例:均在类内初始化
// .h
class VehicleDensityController
{
public:
static constexpr int m_Value = 100;
static const int m_Range = 200;
};
例:constexpr在类内初始化,const 在类外部初始化
// .h
class VehicleDensityController
{
public:
static constexpr int m_Value = 100;
static const int m_Range;
};
// .cpp
const int VehicleDensityController::m_Range = 200;
参考:
C++ Primer:static const与static constexpr的类内数据成员初始化(练习7.58解答)_北冥有鱼wyh的博客-CSDN博客