在C/C++中,关键字static有以下3个明显的作用:
1、在函数体内,一个被声明为静态的变量在这一函数被调用的过程中维持其值不变。(维持着上次函数调用后的值,而不是每次函数调用后,值都重新进行声明)
代码示例:
#include <iostream>
using namespace std;
void func() {
static int a = 100;
a++;
cout << a << endl;
}
int main() {
func(); // 调用 1 次
func(); // 调用 2 次
func(); // 调用 3 次
return 0;
}
输出:
101
102
103
可以看到,在static变量声明之后,每次调用函数,static变量都是维持着上次调用的值。而不是每次调用都重新声明。
2、在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问。它是一个本地的全局变量。
3、在模块内,一个被声明为静态的函数只可被这一模块内的其他函数调用。也就是,这个函数被限制在声明它的模块的本地范围内使用。
代码示例:
#include <iostream>
using namespace std;
// 全局静态变量:只能被本模块内的函数访问
static int a = 100;
// 全局静态函数:只能在本模块范围内被调用
static void func1() {
cout << "static func" << endl;
}
// 局部静态变量,声明之后值维持不变(维持上次调用后的值,而不是每次调用都重新声明),不论函数调用多少次
void func2() {
static int b = 100;
b++;
cout << b << endl;
}
int main() {
func2();
func2();
func2();
func1();
return 0;
}
输出:
101
102
103
static func
参考:《C和C++程序员面试秘笈》
谢谢阅读