C++ 入门 说
每个局部静态变量在第一次之前都会被初始化
执行通过对象的定义。本地静态数据是
函数结束时不会被销毁;当程序运行时它们被销毁
终止。
局部静态变量与全局静态变量有什么不同吗?除了申报地点不同之外,还有什么不同呢?
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;
}
与之比较
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;
}
差异是:
- 该名称只能在函数内访问,并且没有链接。
- 它在第一次执行到达定义时被初始化,不一定在程序的初始化阶段。
第二个区别有助于避免静态初始化顺序惨败,全局变量可以在初始化之前访问。通过用返回局部静态变量引用的函数替换全局变量,您可以保证它在任何内容访问它之前就已初始化。 (但是,仍然不能保证在任何东西完成访问它之前它不会被销毁;如果您认为需要一个全局可访问的变量,您仍然需要非常小心。请参阅注释link https://stackoverflow.com/a/335746/14065在这种情况下提供帮助。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)