我有一个只包含静态方法的类。头文件声明了许多私有静态成员变量,这些变量在相应的.cpp中定义,从而在所有转换单元中提供了这些变量的单个实例。标头不包含方法模板或其他实现。
// myclass.h
class MyClass
{
private:
static bool m_boolean;
static int m_int;
...
}
// myclass.cpp
#include "myclass.h"
bool MyClass::m_boolean(false);
int MyClass::m_int(-1);
...
在标头中声明私有静态变量并在.cpp中定义它们的原因是什么?似乎可以简单地将它们移动到具有相同存储类的.cpp文件范围中:
// myclass.h - no private static member variables!
// myclass.cpp
#include "myclass.h"
static bool m_boolean(false);
static int m_int(-1);
...
将私有变量移至.cpp具有通过减少头流失而缩短构建时间的额外好处。
在文件范围内声明变量的缺点似乎是,它将使它们可以通过.cpp中的任何函数进行修改,甚至可以在其他某个类中声明的函数(不是.cpp包含该类中其他类的实现)案件)。相反,在标头中声明/.cpp中的定义将变量修改限制为声明类。
将私有静态类变量移至文件作用域还有其他含义吗?