美文网首页
静态变量是为了解决什么问题而存在的?

静态变量是为了解决什么问题而存在的?

作者: 小小何先生 | 来源:发表于2021-02-27 22:55 被阅读0次

[toc]

对这个问题的补充描述如下:

它提供了什么好处? 
有什么场景需要使用到它? 

我在搜索引擎搜到的都只是说什么语法方便..
还有编译方面的实现之类的这些内容..

但是我关心的是 它是为了什么而诞生的?

好!好一个只关心为了什么而诞生的!说一下c++中的静态变量吧!

程序在处理的时候,都是处理数据,或者称之为变量。变量的存储分为动态存储静态存储静态存储说的是在程序运行的整个过程中都存在,而动态存储则是在调用函数时临时分配的存储单元。

这么做的好处显而易见,有些变量,我就是希望他是全局的,而有些变量,我希望它随着函数的调用而动态存储和消亡。C++中来处理“静态”这一件事情,用的是static关键字。

对于一个程序,最重要的三大部分就是:变量函数。从而可以细分为对全局变量、对局部变量、对函数、对类成员、对类函数的五种修饰,从而得到全局静态变量局部静态变量静态函数类的静态成员类的静态函数

static对变量的修饰

  1. 对全局变量的修饰,得到全局静态变量,能够使得其作用域在定义的开始处到文件结尾。例如在a.c中定义了static int a = 10;那么在b.c中用extern int a是拿不到a的值的,因为a的作用域只在a.c中。这样能够解决文件之间的符号污染问题

  2. 对局部变量(栈变量)修饰,得到局部静态变量,将栈变量生命周期延长到程序执行结束时。 也就是说局部静态变量的作用域仍然是在这个函数所定义的局部作用域,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。未经初始化的局部静态变量,会被自动初始化为0。(普通的局部变量分配在栈上,如果没有给定初始化的值的话,会分配一个随机值,并且会随着函数栈帧的释放而被释放掉。)。这么做的用意在于,对于某些局部变量,我们可以保留并使用一些需要的信息,比如记录这个函数被调用了多少次

static对函数的修饰

  在函数返回值类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但如果用static修饰的话,与static修饰全局变量一样,静态函数只能在声明它的文件中可见,不能被其它文件调用。也不会与其它cpp中的同名函数引起冲突

static对类的修饰

  1. static对类成员的修饰,得到了类的静态成员。在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性,因此静态成员是类的所有对象中共享的成员,而不是某个对象的成员,对多个对象来说,静态数据成员只存储一处,供所有对象公用
  1. static对类函数的修饰,得到了类的静态函数。和静态数据成员一样,它们都属于类的静态成员,而不是某个具体对象成员,因此,对于静态成员的调用不需要用对象名。这样也能减少创建多个对象时的一些不必要的开销

可以看到,静态变量用处强大!!!!

相关文章

  • 静态变量是为了解决什么问题而存在的?

    [toc] 对这个问题的补充描述如下: 好!好一个只关心为了什么而诞生的!说一下c++中的静态变量吧! 程序在处理...

  • 内部类

    非静态内部类不能含有静态变量或静态方法 非静态内部类依托于外部类对象而存在,即是内部类存在于外部类对象实例化之后!...

  • Java中成员变量、局部变量、全局变量、静态变量存在位置及初始化

    成员变量 定义在一个类的变量:类中方法外 静态属性:随类的存在而存在,是在类加载的初始化 非静态属性:随实例的属性...

  • static用法笔记

    static,修饰静态变量,静态方法,静态代码块。 1、用途: 随着类的加载而加载优先于对象存在被所有对象所共享可...

  • 静态本地变量

    静态本地变量 在本地变量定义是加上static修饰符就成为静态本地变量 当函数离开的时候,静态本地变量会继续存在并...

  • JAVA实例初始化顺序

    存在继承的情况下,初始化顺序为: 父类(静态变量、静态语句块)子类(静态变量、静态语句块)父类(实例变量、普通语句...

  • DNS解析

    1.什么是DNS?是为了解决什么问题而存在的2.DNS解析原理<递归查询,迭代查询> DNS概述及作用 DNS(D...

  • 成员变量和静态变量异同点

    主要区别 生命周期不同(1)成员变量随着对象的创建而存在,随着对象的收回而收回。(2)静态变量随着类的加载而加载,...

  • Spring Framework 5

    如何学习Spring框架 了解Spring的出现是为了解决什么问题!!!了解Spring的出现是为了解决什么问题!...

  • Spring Framework 5

    如何学习Spring框架 了解Spring的出现是为了解决什么问题!!!了解Spring的出现是为了解决什么问题!...

网友评论

      本文标题:静态变量是为了解决什么问题而存在的?

      本文链接:https://www.haomeiwen.com/subject/kddufltx.html