首先,C++是C的超集,所以static在C中的用法 对于C++来说是全盘接受的,而两者的不同也就是C++中多出来的特性,而这些多出来的特性与C++面向对象的特性有关,或更具体的说,就是static在“类”中的意义和作用。
1:C语言中的Static使用:
1.1 C中static变量 的影响其实不在作用域而在于 其“存储方式”:
即在函数内定义的static变量,其作用域仍然在函数内;在函数外定义的static变量,其作用域也在函数外,属于变量所在的文件的作用域。
static 的静态存储方式使得:同一函数的所有static变量的“副本”都共用一个该变量。所以使用了static变量的函数一般是“不可再入”的,不是“线程安全”的。
1.2 C中static函数 的作用:
C中static函数还有另外一个名字,叫:内部函数。从名字也可看出,C中的static函数的定义将函数“局部化”,使其访问权限被限制在当前文件内部,这实际上说明的是一种“代码的隐藏机制”,通过和extern函数(外部函数)的联合使用,可以实现C语言中函数的模块化设计,这有点类似与C++ 中的Public和private关键字的味道。 当然,如果在C中,函数默认的访问权限是extern的,所以关键字extern往往省略不写。
2: C++类中定义的Static变量和函数
其实本质上与C中的情况一致,不在于作用域(还是类的作用域),而在于其“存储方式”决定了Static变量将与类存储在一起(因为类本身在内存中有其原型的内存空间),而类的实例将共享这一static变量,所以static变量也不是“线程安全”的。
而static成员函数的设置,主要是为了访问静态变量,或者完成某些独立于类实例的功能。