当前位置: 首页 > 科技观察

EasyC++,静态持久化变量

时间:2023-03-17 16:07:09 科技观察

大家好,我是梁唐。想要追求更好阅读体验的同学可以点击“阅读原文”访问github仓库。auto关键字我们现在知道使用auto关键字可以自动推导出变量类型,尤其是在一些非常复杂的情况下,使用auto可以大大简化代码。但在早期的C++和C语言中,auto关键字用于显式指示变量是自动存储的。自动浮动;这个特性几乎不被使用,所以在C++11中更新了它,赋予了它新的含义。静态持久变量C++中除了自动存储变量外,还有静态持久变量。关于静态持久变量的定义,C++和C语言是一样的。它有三种联动方式,即外部联动、内部联动和不联动。其中,外部链接表示可以在其他文件中访问,内部链接表示只能在当前文件中访问,无链接表示只能在当前函数或代码块中访问。这三种联动虽然作用域不同,但都存在于程序运行的整个过程中,因此具有较长的生命周期。由于静态持久化变量的个数在程序运行过程中保持不变,所以不需要使用栈来管理它们。编译器将分配一个固定的内存块来存储所有静态变量,这些变量在整个程序运行期间一直存在。对于所有未显式初始化的静态变量,编译器会将其设置为0。默认情况下,静态数组和结构的所有元素和成员的所有位都设置为0。下面分别介绍这三个静态持久变量的创建方法:intcnt=1000;staticintone_file=50;voidfunc1(intn){staticintret=0;}intmain(){//somestatements}在上面的代码中,我们定义了三个静态持久变量变量:cnt、one_file、ret。其中cnt是externallinkage,可以在任何地方使用。one_file是内部链接的,可以在当前文件的任何地方使用。而ret没有联动,只能在函数func1中使用。但是这里需要注意一点,虽然ret只能在函数func1中使用,但并不代表函数func1执行前ret不存在。前面提到,静态持久化变量有单独的内存块进行存储,不受函数生命周期的影响。我们来看一个例子:voidtest(){staticintret=0;ret++;cout<