У меня есть класс, содержащий только статические методы.Заголовочный файл объявляет ряд закрытых статических переменных-членов, которые определены в соответствующем .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 ограничивает изменение переменной декларирующим классом.
Существуют ли какие-либо другие последствия при перемещении частных статических переменных класса в область действия файла?