C/C++ static语义(semantics)
static可以用来修饰变量(variant)和函数(function)。但static作用于普通变量/函数与类(calss)变量/函数的语义是不一样的。
static有两种基本的语义,第一种是存储方式(storage),这种语义只作用于变量,不适用于函数,第二种是访问控制(Access Control)。
用static修饰一个普通变量有两层含义。其一是表示该变量的值在超出作用域范围后仍然有效,一般编译器将static变量放置到全局静态存储区,比如.data或.bss(Block Started by Symbol)节,这就是存储方式语义。其二是表示该变量只在声明的作用域范围内可以被访问,比如, 声明在一个文件作用域内的变量不能被其他文件访问,这就是访问控制语义。
用static来修饰普通函数的时候则只有一种语义,即访问控制,因为无论如何,函数总是要被编译器放置到.text节的。也就是说用static修饰的普通函数不能被其他文件内的代码访问。
C++中用static来修饰成员变量和函数的语义稍有不同,其含义表示这些变量或函数是属于整个类(class)而不特定于任何一个该类的对象(object),即使该类没有一个对象产生,仍然可用使用类来访问这些变量和函数。这是C++对C static语义的扩展。