Мне кажется, что статическая переменная класса идентична внешней переменной, потому что вы только объявляете ее в static int x
/ extern int x
, и фактически определить его в другом месте (обычно в файле .cpp)
// .h file
class Foo
{
static int x ;
} ;
// .cpp file
int MyClass::x = 0 ;
// .h file
extern int y;
// .cpp file
int y = 1;
В обоих случаях переменная где-то объявляется один раз и определяется в файле, который не будет включаться более одного раза в компиляцию (иначе ошибка компоновщика)