一、C语言
1.静态局部变量
在全局数据区进行内存分配,生存期长于它对应的函数,程序执行到该对象的声明处时被首次初始化,只初始化一次,即以后的函数调用不再进行初始化,如果没有显式初始化,自动初始化为0,它始终驻留在全局区,直到程序运行结束,但其作用域为局部作用域,也就是不能在函数体外面使用它。
2.静态全局变量
文件隔离!
3.静态函数
文件隔离!
C语言中这几种static的用法也可以用在C++中。
文件隔离就是他们的作用域被限制在定义他们的源文件中,即它们具有文件隔离的特性,这意味着,即使相同的函数名(变量名)在其它源文件中被声明,也不会与当前静态全局函数产生冲突,更进一步,这种特性可以有效的隐藏和隔离错误,有利于模块化程序设计,增强了代码的可阅读性和可维护性。
二、C++
除C语言的几种用法,还有额外两种。
1.静态数据成员
用于修饰class的数据成员,即“静态成员”,这种数据成员的生存期大于class的对象(示例instance).。静态数据成员是每个class有一份,普通数据成员是每个instance有一份,因此静态数据成员也叫类变量,而普通数据成员叫示例变量
2.静态成员函数
静态数据成员函数不能访问非静态(包括数据成员和成员函数),只能访问静态(成员和函数),但费非静态可以访问静态(函数和成员)。
调用静态成员函数可以用成员访问操作符(.)和(->),为一个类的对象或指向类对象的指针调用静态成员函数也可以用类名::函数名调用(因为它本来就是属于类的),用类名调用很正常。