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