(1)在修饰变量的时候,static
修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
(2)static
修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern
外部声明也不可以。
(3)static
修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static
修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。
(4)不想被释放的时候,可以使用static
修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用 static
修饰。
(5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static
)。
详情参考自 https://www.runoob.com/w3cnote/cpp-static-usage.html
针对(1)给出以下例子:
#include <iostream>void Function()
{int i = 0;i++;std::cout << i << std::endl;
}int main()
{Function();Function();Function();Function();Function();std::cin.get();
}
这样会输出5个1,因为i是局部变量,作用域为函数内,而生命周期是从函数开始到结束,所以每次函数调用就会重新初始化为0然后加一。如果加上static
#include <iostream>void Function()
{static int i = 0;i++;std::cout << i << std::endl;
}int main()
{Function();Function();Function();Function();Function();std::cin.get();
}
这样就会输出12345,因为static
使得i变成静态的,虽然它的作用域还是函数内,但是生命周期已经变成从程序开始运行到结束,且只能初始化一次,所以可以进行五次加一。