1.隐藏
当同时编译多个源文件(.cpp)时,在某一个源文件中用static修饰的全局变量或函数,对其他源文件是隐藏的
//1.cpp
int a = ;
void fun()
{
cout << << endl;
}
static int b = ; //main.cpp
int main()
{
extern int a;
cout << a << endl; //输出:5 extern void fun();
fun(); //输出:666 extern int b;
cout << b << endl; //编译错误:b在1.cpp中是static的 return ;
}
2.static使局部变量也具有全局生存周期
1)静态全局变量,生存周期为整个程序,作用域为定义它的源文件内(隐藏)
2)静态局部变量,它的生存周期还是整个程序,但是作用域仅限于定义它的函数内,也就是说在其他函数中不能使用它
int fun()
{
static int a = ;//在第一次进入这个函数的时候,staticj局部变量a被初始化为10,这是a唯一的一次初始化
--a;
return a;
} int main()
{
cout << fun();
cout << endl;
cout << fun();
cout << a << endl;//错误:不能在其他地方使用静态局部变量a return ;
}
程序输出:
3.默认初始化变量为0
1)如果没有给static修饰的变量赋予初始值,则它将被默认初始化为0
2)全局变量也具备这一特性,某些时候这一特性可以减少程序员的工作量