Static 是用于赋予元素特殊特征的关键字。静态元素在静态存储区域中的程序生命周期中仅分配一次存储。他们有一个范围直到程序生命周期。静态关键字可以与以下函数中的静态变量一起使用。
在 C 编程语言(及其密切的后代,如 C++ 和 Objective-C)中,static 是一个保留字,同时控制生命周期(作为静态变量)和可见性(取决于链接)。静态一词也用于受 C 影响的语言中,例如 Java。
在 C 中,static 是一个存储类(不要与面向对象编程中的类混淆),extern、auto 和 register(它们也是保留字)也是如此。每个变量和函数都有这些存储类之一;如果声明未指定存储类,则使用与上下文相关的默认值:
extern 用于源文件中的所有顶级声明,
auto 用于在函数体中声明的变量。
存储类生命周期可见性
extern 程序执行外部(整个程序)
内部静态程序执行(仅限翻译单元)
自动,注册函数执行(无)
在这些语言中,术语“静态变量”有两个容易混淆的含义:
与程序具有相同生命周期的变量,如上所述(与语言无关);或
(C-family-specific)使用存储类静态声明的变量。
具有存储类 extern 的变量,包括在顶层声明的没有显式存储类的变量,在第一个含义上是静态的,但不是第二个含义。
在声明变量或函数时添加前缀的 static 关键字可能会产生其他影响,具体取决于声明发生的位置。
静态全局变量
在源文件的顶层(在任何函数定义之外)声明为静态的变量仅在整个文件中可见(“文件范围”,也称为“内部链接”)。
静态局部变量
在函数中声明为静态的变量是静态分配的,因此在所有程序执行过程中都会保留它们的内存单元,同时具有与自动局部变量(auto 和 register)相同的可见范围,这意味着对函数保持本地。因此,该函数在一次调用期间放入其静态局部变量中的任何值在再次调用该函数时仍然存在。
静态成员变量
在类定义中声明为静态的成员变量是类变量(在所有类实例之间共享,而不是实例变量)。
静态函数
同样,静态函数——在源文件的顶层(在任何类定义之外)声明为静态的函数——仅在整个文件中可见(“文件范围”,也称为“内部链接” )。
静态方法
同样,静态方法(在类定义中声明为静态的方法)意味着与类的所有实例相关,而不是与任何特定实例相关。