纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

C++静态持续变量 C++静态持续变量介绍

梁唐   2021-11-27 我要评论
想了解C++静态持续变量介绍的相关内容吗梁唐在本文为您仔细讲解C++静态持续变量的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C++静态持续变量,静态持续变量,C++静态下面大家一起来学习吧。

1、auto关键字

我们现在知道使用auto关键字可以自动推导变量类型尤其是在一些很复杂的情况下使用auto可以大大简化代码。但是在早期的C++和C语言当中auto关键字被用来显式地表示某个变量为自动存储。

auto float dis; 

这个功能几乎不被使用所以在C++11当中进行了更新赋予了它新的含义。

2、静态持续变量

除了自动存储变量之后C++当中还有静态持续变量。关于静态持续变量的定义C++和C语言是一样的它拥有三种链接性即外部链接性、内部连接性和无链接性。其中外部链接性指的是可以在其他文件中访问内部链接性指的是只能在当前文件访问无链接性指的是只能在当前函数或代码块中访问。

这三种链接性虽然范围不同但都在整个程序运行期间存在因此它们的寿命更长由于在程序运行期间静态持续变量的数目保持不变因此不需要使用栈来管理它们。编译器将会分配固定的内存块来存储所有的静态变量这些变量在整个程序运行期间一直存在。

并且所有没有显式初始化的静态变量编译器都会将它置为0。在默认情况下静态数组和结构将所有元素和成员的所有位都置为0。

下面介绍一下这三种静态持续变量的创建方法:

int cnt = 1000; 

static int one_file = 50; 

void func1(int n) { 

    static int ret = 0; 

} 



int main() { 

 // some statements 

} 

在上面这段代码当中我们定义了三个静态持续变量:cnt,one_file,ret。其中cnt为外部链接性它可以在任何地方使用。one_file为内部链接性可以在当前文件中任意地方使用。而ret没有链接性只能在函数func1中使用。

但是这里有一点要注意虽然ret只能在函数func1中使用但这并不意味着函数func1执行之前ret不存在。前面说了静态持续变量拥有单独的内存块来存储并不受函数生命周期的影响。

我们来看一个例子:

void test() { 

 static int ret = 0; 

 ret++; 

 cout << ret << endl; 

} 

 

int main() { 

    test(); 

 test(); 

 return 0; 

} 

请问当我们运行上述代码屏幕当中会得到什么结果?

答案是1和2因为ret变量是一个静态持续类型虽然我们只能在函数test内部使用它但它不受函数test生命周期的影响。也就是说static int ret = 0;这句初始化语句只会在test函数第一次执行时执行一次之后即使函数退出这个值依然存在。当我们第二次执行的时候由于ret变量已经存在所以并不会将它再置为0。

对于这里用到的关键字static简单理解成静态是不妥的。其实它有两层含义当我们是在一个函数内部局部声明的时候它表示的是这个变量是一个无链接性的静态变量表示的是存储的持续性。当用于代码块外部声明时static表示的是内部链接性如果不加static则表示外部链接性。所以这其中的作用是有一点区别的也有人将它称为关键字重载即关键字的具体含义取决于上下文。


相关文章

猜您喜欢

  • java导出excel Java实现导出Excel功能

    想了解Java实现导出Excel功能的相关内容吗zexzhang在本文为您仔细讲解java导出excel的相关知识和一些Code实例欢迎阅读和指正我们先划重点:java导出excel,java导出excel功能下面大家一起来学习吧。..
  • Qt5.14 与 OpenCV4.5 图片增强 Qt5.14与OpenCV4.5教程之图片增强效果

    想了解Qt5.14与OpenCV4.5教程之图片增强效果的相关内容吗fjqlldg在本文为您仔细讲解Qt5.14与OpenCV4.5图片增强的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Qt5.14与OpenCV4.5图片,Qt5.14与OpenCV4.5下面大家一起来学习吧。..

网友评论

Copyright 2020 www.ducttapegames.com 【环球游戏网】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式