1、什么是static?
       static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。

2、为什么要引入static?
       函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。

3、什么时候用static?
       需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见。

4、static的内部机制:
       静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。
       这样,它的空间分配有三个可能的地方,一是作为类的外部接口的头文件,那里有类声明;二是类定义的内部实现,那里有类的成员函数定义;三是应用程序的main()函数前的全局数据声明和定义处。
      静态数据成员要实际地分配空间,故不能在类的声明中定义(只能声明数据成员)。类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配,所以在类声明中写成定义是错误的。它也不能在头文件中类声明的外部定义,因为那会造成在多个使用该类的源文件中,对其重复定义。
      static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间,静态
数据成员按定义出现的先后顺序依次初始化,注意静态成员嵌套时,要保证所嵌套的成员已经初始化了。消除时的顺序是初始化的反顺序。

5、static的优势:
       可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

修饰局部变量时,使得该变量在静态存储区分配内存;只能在首次函数调用中进行首次初始化,之后的函数调用不再进行初始化;其生命周期与程序相同,但其作用域为局部作用域,并不能一直被访问;
修饰全局变量时,使得该变量在静态存储区分配内存;在声明该变量的整个文件中都是可见的,而在文件外是不可见的;
修饰函数时,在声明该函数的整个文件中都是可见的,而在文件外是不可见的,从而可以在多人协作时避免同名的函数冲突;
修饰成员变量时,所有的对象都只维持一份拷贝,可以实现不同对象间的数据共享;不需要实例化对象即可访问;不能在类内部初始化,一般在类外部初始化,并且初始化时不加static;
修饰成员函数时,该函数不接受this指针,只能访问类的静态成员;不需要实例化对象即可访问。

C++中static作用和使用方法相关推荐

  1. php 静态类内存,php面向对象中static静态属性与方法的内存位置分析

    本文实例分析了php面向对象中static静态属性与方法的内存位置.分享给大家供大家参考.具体如下: static静态属性的内存位置-->类,而不是对象.下面做测试来证明一下 header(&q ...

  2. 电感在电路中的作用与使用方法

    一. 电感器的定义. 1.1 电感的定义: 电感是导线内通过交流电流时,在导线的内部及其周围产生交变磁通,导线的磁通量与生产此磁通的电流之比. 当 电感中通过直流电流时,其周围只呈现固定的磁力线,不随 ...

  3. java中static作用详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  4. Java中static的作用详解_java中static作用详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  5. java中static x 5_java中static作用详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  6. java中static作用_java中static作用详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以修饰静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  7. static详解java_java中static作用详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  8. Java中static作用及用法详解

    1.1概述: static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存 ...

  9. java中static作用详解(版本二)

    static 属于全局,也就是类的属性 和方法,换句话说 一个类,不管有多少个实例,却只有一个全局变量 class B {static int a=0;} B b1=new B();......... ...

最新文章

  1. LeetCode简单题之杨辉三角
  2. linux 查看磁盘分区的文件系统格式
  3. POJ 1144 Network(无向图连通分量求割点)
  4. 什么是服务器信息怎么看,怎么查看服务器信息
  5. el-tree 权限 勾选_一周新债总结,最高涨30%,10月26日起可转债交易需要先开权限...
  6. 每天一道LeetCode-----生命游戏
  7. MyEclipse 清理项目缓存的几大方法
  8. Linux内核开发:内核模块参数
  9. mac 打不开 不受信任_管理不受信任的外键
  10. Q138:PBRT-V3,伪随机数发生器(pseudo-random number generator,RNG)(A.1.2章节)
  11. N1盒子刷机经验分享
  12. 史上最强之《Pyqt》写游戏
  13. Halcon 入门教程(01)
  14. MATLAB全局变量
  15. donet 微服务开发 学习-AOP框架基础
  16. vue设置proxy代理,如何去查看代理地址
  17. ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 NUMBER
  18. Java之颜色工具-yellowcong
  19. 二值图像快速细化算法
  20. RK3399平台开发系列讲解(内核设备树篇)3.25、WIFI设备树的解析

热门文章

  1. linux modprobe 和 insmod
  2. 联想c语言面试题,联想面试问题(全英文)
  3. 壳聚糖(CS)/京尼平(GP)/明胶(G)/β-甘油磷酸钠(β-GP)共混的温敏性水凝胶/壳聚糖载银水凝胶的研究制备
  4. 数据特征分析之帕累托分析以及python实现
  5. 【spring源码】二、bean定义、工厂
  6. php指针取数组元素,php实现数组指针操作详解
  7. 【VB与数据库】——数据库连接
  8. zibll子比主题6.4.1开心版 免授权 修复评论弹授权 可做付费下载站 含视频教程
  9. 第四期培训总结——总结我的总结附教大家做总结的总结
  10. 如何理解前端工程化?