转载自:https://www.cnblogs.com/lpxblog/p/5190463.html

static,即静态声明。它在 作用域、存储方式、生命周期 等各方面影响一个变量或函数。文章将从 局部变量、全局变量、普通函数、类的static成员(包括数据成员与成员函数)来总结static。

  • 全局变量

    所有的全局变量,无论是否是static的,都是存储于静态存储区的。全局变量本身就是静态存储方式,将全局变量声明为static是为了将变量的作用域限制在本翻译单元中(本源文件中),使该全局变量不能被源程序的其他翻译单元所引用。普通全局变量使用extren声明可以拓展其作用域至其他翻译单元中。

    可以总结为:static改变了全局变量的作用域,而不改变变量的存储位置与生命周期。

  • 局部变量

    局部变量即在函数内定义的或在块中定义的变量。static对局部变量的作用不同于全局变量。普通局部变量在离开其作用域(如离开定义它的函数或块的花括号)时即消失,而static变量却存在于程序运行的整个过程,也即是说,static声明改变了局部变量的生命周期。普通局部变量是存储在动态存储区的(堆),而static局部变量是存储在静态存储区,因而普通局部变量在函数每次被调用时都被重新分配内存地址,而静态局部变量则在程序运行过程中占据固定的内存。

    可以总结为:static改变了局部变量的存储方式与生命周期,而不改变变量的作用域。

  • 普通函数

    这里的普通函数是为了与类的成员函数区别开来。函数在定义时默认是外部的,通过extren声明即可被其他源文件引用,static声明将函数的作用域限制在本翻译单元中,成为内部函数。static函数在内存中只有一份,普通函数在每个调用中维持一份拷贝。

    可以总结为:static使得函数在内存中只有一份,并将函数作用域限制在当前源文件。

另外,static有几个优点总被提起:

1. 避免了链接时与其他源文件中的变量命名引起冲突。
2. 对于c函数而言,static对函数进行了信息屏蔽,只给当前文件中其他函数使用。

  • 类static成员

    static声明对类成员的作用可以这样概括:static使得成员从“属于类对象”变成了“属于类,而不属于类对象”。

    对于数据成员

  1. static数据成员必须在类定义体的外部进行定义。
class BOOK
{private://折扣static float discount;
};
//在类定义体外部定义并初始化
float BOOK::discount = 0.95f;
  1. 不像普通数据成员,static数据成员不能在构造函数中进行初始化。正如上面所说,它只能在类外部定义并初始化。然而有一个例外,整型的const static 数据成员可以在类的定义体中进行初始化。但需注意的是,const static数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义(不必再指定初始值了)。
class BOOK
{private://折扣const static  int  discount=1;
};
const  int BOOK::discount;
  • 类static成员函数

    在类内部声明的static成员函数,在类定义体外部进行定义时无须重复指定static关键字。

    对于static成员函数,它同样是不属于类对象的,因而它没有this指针。它可以直接访问类的static数据成员,不能直接使用非static成员,原因是非static数据成员属于类对象,使用非static数据成员时必须通过this指针来确定是这些成员属于哪个类对象,然而上面说了,static成员函数没有this指针。

    static成员函数不能被声明为const。实际上,成员函数被声明为const的本质是它向编译器保证不会通过这个函数来修改类对象在内存中的每一个bit的内容(可以看《effective C++》 条款03 “尽可能使用const” ),然而我们知道,static成员函数并不属于类对象,更谈不上要保证不修改某一对象的内存了。

    另外,虚函数不能为声明为static,为什么呢?原因还是static成员函数没有this指针。virtual funtion运行时绑定是多态的基础,没有this指针多态的概念无法践行。

static关键字总结相关推荐

  1. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  2. Java 静态变量,静态方法,静态常量(java static 关键字)

    Java 静态变量,静态方法,静态常量  就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...

  3. static关键字用法

    static关键字 1.修饰成员变量 在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句 ...

  4. Java中的static关键字的用法

    1.静态方法 static:通常在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: (1)它们仅能调用其他的static方法. (2 ...

  5. java的static关键字

    java的static关键字 静态变量和静态方法 static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static ...

  6. 面试季,Java中的static关键字解析

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面 ...

  7. c++语言static作用,详解c++中的 static 关键字及作用

    注:若没有特指是 静态成员时,默认都是普通成员: 1 类中的普通成员 类中的成员变量 和 成员函数 是分开存储的.其中, 1)每个对象都有独立的成员变量:成员变量可以存储在 栈空间.堆空间.全局数据区 ...

  8. static关键字了解解析

    什么是static关键字 static关键字我们经常接触,不过我们一直没有讨论过它到底是什么,有什么具体的作用,那static关键字是什么呢,有啥用呢? static是静态的意思,是一个修饰符,就像是 ...

  9. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  10. C++中的static关键字的总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...

最新文章

  1. html 提交表单,图片和文字一起提交,图片存入服务器,图片地址和表单信息存入数据库,带后端php代码
  2. 【MM配置】评估和账户确定(Valuation Account Determination) - 1
  3. 杠上了,Linus 再次怒喷 Intel 直言“去死”
  4. 安装C语言版本tensorflow
  5. 用户需求、己、竞争对手的关系
  6. 前端进阶系列(六):盒模型
  7. 力扣53.最大子序和 多种方法
  8. checkbox修改默认样式
  9. php 0 n随机数,PHP n个不重复的随机数生成代码
  10. 计算机网络前三章试题,计算机网络前三章复习试题PPT课件.ppt
  11. python 成语库_python正则表达式抓取成语网站
  12. php制作相册mp4,相册视频制作软件免费版
  13. 如何开启显示文件后缀名(扩展名)
  14. 源码分析:《Topic-to-Essay Generation with Neural Networks》
  15. 前后端分离项目,有什么优缺点
  16. 13W 字!银四巨作:Java 进阶架构师核心手册
  17. iOS中分类(category)和类扩展(Extension)的区别
  18. Oracle调优总结
  19. 难受难受,真它吗的难受... ...
  20. python含义是什么_python _=是什么意思

热门文章

  1. Asp.net中网站级异常捕获
  2. MySQL数据备份方式,及热备与冷备的优缺点
  3. 面对滚滚而来好政策 安防行业该如何发展
  4. 二分查找算法(递归与非递归两种方式)
  5. 常见浏览器兼容性问题与解决方案
  6. puppet全方位学习之总结
  7. PL/SQL -- 函数
  8. 怎样实现全屏显示(vc)
  9. what is the thing you fear most?
  10. Girton学院研究生宿舍守则