有人可以准确解释 C 中变量的范围和生命周期的概念吗?在 C++ 中是否有所不同?我对范围和生活感到困惑。
变量的“范围”是源代码的一个区域,您可以在其中引用该变量。
“生命周期”是程序执行期间存在的时间。
默认情况下,局部变量的生命周期与其作用域相同:
void foo()
{
int x = 123;
cout << x << endl;
x += 1;
}
int main(){ foo(); foo(); foo(); }
在这里,每一次foo
被称为新的x
创建(在堆栈上为其保留空间),并且当执行离开该块时x
被宣布,x
被摧毁(对于int
只是意味着保留的空间现在已被释放以供重用)。
相比之下:
void foo()
{
static int x = 123;
cout << x << endl;
x += 1;
}
int main(){ foo(); foo(); foo(); }
在这里,自从x
被宣布static
, 空间被保留x
在程序执行开始之前。x
在内存中有一个固定的位置,它是静态变量。 C++ 对于此类变量的初始化有特殊规则:它在执行第一次通过声明时发生。
因此,在第一次调用中foo
this x
初始化,输出语句显示123,增量将值加1。在下一次调用中,初始化将被跳过(已经执行过),输出值124,并且该值再次增量。很快。
这个的寿命x
是从执行开始到执行结束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)