如果希望延长一个局部变量的生命周期,让它在作用域外依然保留,可以在定义局部变量时加上static
关键字;这样的对象叫做局部静态对象。
局部静态对象只有局部的作用域,在块外依然是不可见的;但是它的生命周期贯穿整个程序运行过程,只有在程序结束时才被销毁,这一点与全局变量类似。
string copyStr(string str)
{
static string r;
// string r;
r += str;
return r;
}
int main()
{
string s = "a";
string result;
int n = 2;
while (n > 0)
{
result += copyStr(s);
n--;
}
cout << result;
return 0;
}
可以发现,当copyStr函数中是static string r
时最终输出aaa
,原因是第一次调用返回为a
,第二次调用返回为aa
,static
使得r
第一次被调用的值被保留。result最终将第一次调用的值和第二次调用的值相加,输出aaa
。
而当copyStr函数中是string r
时,最终输出aa
,原因是分别调用两次函数,每次result的字符串都要加上a
,调用两次即为两个a
。
静态对象只在第一次执行到定义语句时创建出来,之后即使函数执行结束,它的值依然保持;下一次函数调用时,不会再次创建、也不会重新赋值,而是直接在之前的值基础上继续叠加。静态对象如果不在代码中做初始化,基本类型会被默认初始化为0值。