版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014633283/article/details/48827085
一、误解
之前一直觉得变量(对象)的“生命期”和“作用域”只是两种不同的表述,其在实质上是统一的:若变量的作用域是全局的,那么其生命期也是从创建时直到程序结束;若变量的作用域是函数局部的,那么其生命期就是从创建到函数调用结束。而之前对于“static”保留字的理解也是:将生命期延长了,同时将作用域扩大了(因为我之前一直误以为作用域和生命期的变化是正相关的)
二、新的理解
直到看到《C++ primer》(第4版P200)中7.5.2节关于”静态局部变量”,知道:”当函数中的变量定义为static时,该变量的作用域不变,仍然处于函数作用域中;而其生命周期延长了,跨越这个函数的多次调用,直至函数结束。“其示例代码如下:
size_t count_calls()
{
static size_t ctr = 0;
return ctr++;
}
int main()
{
for(size_t i=0;i !=10; ++i)
{
cout << count_calls() <<endl;
//cout << ctr << endl;
}
return 0;
}
其中注释掉的部分出错,从中可以看出ctr的生命期延长了,但作用域仍处于count_calls函数中。