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