Закрытые статические переменные: объявление заголовка / определение.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 ограничивает изменение переменной классом объявления.

Есть ли какие-либо другие последствия для перемещения частных статических переменных класса в область видимости файла?

0 ответов

Другие вопросы по тегам