变量(对象)“生命期”和“作用域”的关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 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函数中。

猜你喜欢

转载自blog.csdn.net/u014633283/article/details/48827085