static是一个用来修饰变量、函数和类的关键字。
在C中:
1、修饰全局变量
》 在函数外部使用static修饰全局变量时,该变量的作用域只在声明它的源文件内,对其他源文件是不可见的(其他文件可以定义相同名字的变量)。
》 static全局变量的生命周期始终延长到程序结束,所以它的存储是静态的。
2、修饰局部变量
》 static局部变量的作用域是局部的,只在定义它的块内可见。
》 与普通局部变量相比,static局部变量只会被初始化一次,下次调用函数时保留上次的值。
》 static修饰局部变量时生命周期会延长到整个程序执行过程中,而不是只在函数执行期间。
3、修饰函数
》 使用static修饰函数时,表示该函数的链接属性为内部链接,该函数只能在源文件中使用,对于其他文件是不可见的。
》 使用static修饰函数可以防止函数的重名冲突(其他文件可以定义相同名字的函数)。
在C++中:
static在C++中的用法与C中相同,除此之外还有一些额外的用法。
1、修饰类的成员变量
》 在类中static修饰的成员变量被称为静态成员变量,它被所有类的对象所共享,所有对象共享一份静态成员变量的内存空间。
》 静态成员变量在类的所有对象之间是唯一的,可以通过类名来访问,而无需创建对象。
》 静态成员变量的生命周期与程序的生命周期相同,从程序开始到结束。
》 类内声明,类外初始化。
2、修饰类的成员函数
》 在类中使用static
修饰的成员函数被称为静态成员函数,它与类的对象无关,可以直接通过类名调用,不需要创建对象。
》 静态成员函数只能访问静态成员变量和其他静态成员函数,不能直接访问非静态成员变量和非静态成员函数。