首先我们可以将 static 的使用场景分成两部分,一部分在类内,一部分在类外。

类内

对于类内的 static 关键字,它可以被用在方法和变量上,这意味着这个类的所有实例将共享这些 static 的东西,无论是变量还是方法。

初始化方式

这里我给出一种比较简洁的

#include <iostream>
void print(int ele) { std::cout << ele << std::endl; }
class A {
   public:
    static int a;
};
int A::a = 2;
 
template <typename T>
class B {
   public:
    static int a;
};
 
template <typename T>
int B<T>::a = 1;
 
int main(int argc, char const *argv[])
{
    print(A::a);
    print(B<int>::a);
    return 0;
}

类外

这一部分非常简单,如果一个变量或者函数在类外被声明为 static,那么它只会在当前的编译单元也就是 cpp 文件内可见,在链接阶段,这个 static 的东西对于外界是透明的。