C++ 漫谈static关键字

1. 隐藏性

在某.c文件下变量及函数由static限制后,就会对其他源文件隐藏
利用这一特性就可以在不同文件里定义同名变量了!不用担心变量冲突了!
对于被static修饰的函数来说,作用只有一个隐藏性。但是static修饰的变量不但有隐藏性,还有下面几点特性。

2. static变量的记忆功能和全局生存期

static变量是保存在静态数据区,而保存在这里的变量都会在程序一开始就进行初始化且只会进行一次初始化。(全局变量和static变量都存储在静态数据区)

static作为局部变量在函数中时,它的生存期也为整个源程序,但是它的作用域与自动变量相同,只有在定义该变量的函数内可以使用该变量,等到函数结束后,虽然该变量仍然存在,但是却不能使用它

3. 类成员中的static

如果一个变量是类的一部分,但是它却不是变量的一部分,那么我们就可以用static来限制它。一个static成员函数只有唯一一份副本,所以在对象中,我们无法使用this指针去调用该对象。
同理,一个需要访问类成员但是不需要针对指定对象去调用函数,那么我们就可以用static限制成员函数

一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。

4. 其他

我们不能使用const和static同时修饰成员函数。因为c++编译器默认会给成员函数加上隐式的const this*,而static修饰成员函数不能出现this指针,这样会产生冲突。

5. static变量可以在程序哪个部分进行空间分配

  • 头文件
  • 类定义的内部实现
  • main()函数前的全局数据声明和定义处。
    内容引用1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一直使用static,但没用总结过,时间一长概念总有点模糊,趁着这次机会总结一下。c++中:C++中static有...
    被代码淹没的小伙子阅读 531评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通...
    yangqi916阅读 398评论 0 0
  • 我是个薄情的人 我要这样定义自己 薄情的人不会难过 薄情的人会令人怀念 薄情的人不会受伤 薄情的人任性收放自如 薄...
    眼神犀利的猫阅读 795评论 0 0
  • 有一只四处漂泊的老鼠在佛塔顶上安了家。佛塔里的生活实在是幸福极了,它既可以在各层之间随意穿越,又可以享受到丰...
    简篱源阅读 291评论 0 5