静态数据成员不关联到任何对象。即使不定义类的任何对象它们也存在。整个程序中只有一个拥有静态存储期的静态数据成员实例,除非使用关键词 thread_local,此时每个线程都有一个具有线程存储期的该对象 (C++11 起)。
静态数据成员不能是 mutable 的。
在命名空间作用域中,如果类自身具有外部连接(即不是无名命名空间的成员),那么类的静态数据成员也具有外部连接。局部类(定义于函数内部的类)和无名类,包括无名类的成员类,不能拥有静态数据成员。
静态数据成员可以声明为 inline。 inline 静态数据成员可以在类定义中定义,而且可以指定初始化器。它不需要类外定义
#include struct Test { static inline int v = 0; }; int main() { Test c; std::cout << c.v << std::endl; Test::v = 100; std::cout << c.v << std::endl; Test d; std::cout << d.v << std::endl; d.v = 2; std::cout << Test::v << std::endl; //和普通的static变量一样,它是所有对象共享 }文档: 静态成员 - cppreference.com
https://zh.cppreference.com/w/cpp/language/static