先说两个概念:作用域(scope) 和生命周期(lifetime)
作用域: 名字的作用域指的是知道该名字的程序文本区域
生命周期:对象的生命周期指在程序执行过程中对象存在的时间
全局对象, 顾名思义是全局的对象,其作用域是整个程序文本,其对象的声明周期是整个程序的执行过程;
局部对象: 一般说的局部变量都指的是动态局部变量,包括形参,某个语句块中定义的变量等。 动态局部变量是自动对象, 调用时创建,调用完成后自动撤销。 其作用域是局部的(某个块) , 其生命周期也是局部的。
静态局对象: 作用域是局部的, 生命周期是全局的, 通过在局部变量前加static 指定。
eg.
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;
return 0;
}
ctr 是静态局部对象, 其作用域是局部的(count_calls()函数中), 但其生命周期是整个程序运行期。
静态局部对象在第一次调用函数时初始化, 只初始化一次