欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【C++】6.1.1 局部对象

【C++】6.1.1 局部对象

2025/3/9 8:03:51 来源:https://blog.csdn.net/A1617215315/article/details/146115581  浏览:    关键词:【C++】6.1.1 局部对象

笔记内容 参考借鉴了 电子工业出版社 王刚 译 的《C++Primer》第5版 P205内容。

读者有兴趣的可以自行浏览原文,想必会有更深的体会和收获。

在C++中,常常提到对象的 作用域生命周期 这两个概念。

通俗来说,作用域就是这个对象的作用范围,在哪个区域内可以使用,到哪里又不能使用,表达的是这个对象名字能不能被使用的程序区间。

生命周期是在程序执行过程中,该对象存在的一段时间,从哪里开始被定义,又到何时会消亡。

局部变量(local variable)就是作用域只有程序的某一部分的变量,相反的,作用在几乎整个程序区间内的变量就叫全局变量。比如在函数体重定义的变量以及函数形参,这些变量都称为局部变量一般来说,这些变量在离开作用域以后就会消亡。

但是有些时候,需要延迟局部对象的生命周期,从而使得该变量可以在函数调用以后还可以使用,或者下一次调用函数时依然可以生效,这就需要用到局部静态对象。

局部静态对象需要在定义的类型前面加上关键字 static,局部静态对象在程序的执行路径上第一次初始化定义后,不会再被初始化定义,直到程序终止才被销毁。

比如,count_calls是一个记录该函数被调用次数的函数,其中加入了一个局部静态变量ctr,其在该函数的调用时,只会初始化一次,而且每次都会继承上一次执行完的结果:

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;//错误,ctr是静态局部变量,作用域依然是局部范围,因此无法在外部被使用}return 0;
}

最终打印结果如下:

局部对象在应该进行初始化,如果在函数内的内置类型局部变量没有进行初始化,则会执行默认初始化,这将导致该变量的值是随机的。然而,局部静态对象如果没有显式的初始值,内置类型的局部静态默认初始化的值为0。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词