一、关键字static的作用
static关键字在C/C++中主要用于控制变量的存储方式和可见性。
1、在C语言中,static关键字有三个主要作用:
(1)当用于函数内部的局部变量时,static使该变量保持其值不变,即该变量在函数调用过程中的值不丢失,这种变量被称为静态局部变量,只在第一次调用时初始化,普通局部变量在函数调用结束后会销毁,而静态局部变量则存储在静态区,具有与程序相同的生命周期。
(2)当用于模块内但函数体外时,static使得该变量只能被同一模块内所用函数访问,但不能被模块外其它函数访问。相当于一个本地的全局变量。
(3)当用于修饰函数时,static函数仅能被声明它的模块内其他函数调用,即这个函数被限制在声明它的模块的本地范围内使用。
2、在C++中,static关键字的作用有所扩展:
(1)当用于修饰成员变量时,static使该成员成为类的全局变量,被类的所有对象共享。这意味着,无论创建多少对象,都只有一个这样的变量实例。因此,static成员必须在类外进行初始化,而不能在构造函数内进行初始化。
(2)当用于修饰成员函数时,static表示这个成员函数没有this指针,因此它只能访问static成员变量。静态成员函数可以独立于任何对象实例访问,即无需创建对象即可使用。
(3)最重要的特性是隐藏,即当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,可能引发命名冲突。通过使用static,可以在不同的文件中定义同名函数和变量,而不必担心冲突。