私有静态变量:标头声明/.cpp定义与文件范围

时间:2018-11-27 22:07:50

标签: c++ static private-members

我有一个只包含静态方法的类。头文件声明了许多私有静态成员变量,这些变量在相应的.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中的定义将变量修改限制为声明类。

将私有静态类变量移至文件作用域还有其他含义吗?

0 个答案:

没有答案