一、C语言中。有两种
(1)静态局部变量
void fun1()
{
static int n=100;
n=200;//下次进入fun1()时,由于n已经分配好,n值为200不变
}
(2)用在文件级别(函数体外),修饰变量或者函数,表示该变量只在本文件可见,其他文件看不到也访问不到该变量或该函数。专业说法叫做"Internal linkage"
比如:
a.cpp中
static int n=100;
b.cpp中
static int n=100;
两个变量互不干扰
这要和a.cpp和b.cpp想共用同一个变量区别
a.cpp中 int n=100;
b.cpp中 extern int n; //声明
//二者叫做external linkage
全局变量要在.cpp文件定义,其他文件要用的话,extern声明下
二、C++ 新增的static两三种新用法
(3)用于修饰类的人数据成员,即所谓的静态成员,这种数据成员的生存期大于类对象,静态数据成员是每个类有一份,普通数据成员是每个对象各有一份
(4)用于修饰class的成员函数,“静态成员函数”,静态成员函数只能访问静态成员和其他静态成员函数,不能访问非静态成员和非静态成员函数。
(5)静态成员无所谓继承,只有一份,基类和派生类共享,、
例如:基类中有static int b_; 可以这样访问它:Base::b_; Derived::b_ 用基类对象访问b.b_; 派生类对象访问:
d.b_
引申:static与单例模式
看我的这篇文章 https://blog.csdn.net/qq_34793133/article/details/80522603