C++ Primer说
在第一次执行通过对象的定义之前,初始化每个本地静态变量.当函数结束时,不会破坏局部静态; 程序终止时它们会被销毁.
局部静态变量与全局静态变量有什么不同?除了声明它们的位置之外,还有什么不同?
void foo () {
static int x = 0;
++x;
cout << x << endl;
}
int main (int argc, char const *argv[]) {
foo(); // 1
foo(); // 2
foo(); // 3
return 0;
}
Run Code Online (Sandbox Code Playgroud)
与之比较
static int x = 0;
void foo () {
++x;
cout << x << endl;
}
int main (int argc, char const *argv[]) {
foo(); // 1
foo(); // 2
foo(); // 3
return 0;
}
Run Code Online (Sandbox Code Playgroud)
希望这个例子有助于理解静态局部变量和全局变量之间的区别.
#include <iostream>
using namespace std;
static int z = 0;
void method1() {
static int x = 0;
cout << "X : " << ++x << ", Z : " << ++z << endl;
}
void method2() {
int y = 0;
cout << "Y : " << ++y << ", Z : " << ++z << endl;
}
int main() {
method1();
method1();
method1();
method1();
method2();
method2();
method2();
method2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
X : 1, Z : 1
X : 2, Z : 2
X : 3, Z : 3
X : 4, Z : 4
Y : 1, Z : 5
Y : 1, Z : 6
Y : 1, Z : 7
Y : 1, Z : 8
Run Code Online (Sandbox Code Playgroud)
真实姓名是:
static storage duration object.
Run Code Online (Sandbox Code Playgroud)
全局变量也是“静态存储持续时间对象”。与全局变量的主要区别是:
除此之外,它们就像其他“静态存储持续时间对象”一样。
注意:与所有“静态存储持续时间对象”一样,它们以与创建相反的顺序被销毁。