关于static关键字

1. 在C语言中的用法

在C语言中,static关键字意味着:隐藏

  • static变量存储在静态数据区,在程序一开始运行时就完成内存分配工作,因而在定义时必须进行初始化
  • 在函数体内定义的局部变量,在该函数下次被调用时,继续保持原有值。这相当于实现了“全局变量的功能”,但仅在该函数体内可见
  • 在函数体外定义的变量,以及static函数,在该模块(文件)中可见;

2. 在C++中的用法

对于普通的static变量及函数,其作用与C语言类似。而在面向对象部分,

  • static成员变量及static成员函数属于整个类,不属于任何一个对象。
  • 对于static成员变量来说,由于需要在程序一开始运行时就分配内存,而类定义体只是声明了一个类,并不会分配实际的内存空间。因而,static成员变量必须在类定义体外进行初始化。不过,有一个例外情况,static常量整型数据成员或表达式可以在类定义体内完成初始化
  • 而对于成员函数来说,既可以在类定义体内,也可以在类定义体外完成定义
  • 需注意的是,static关键字只需要在类定义体内使用一次,当在类定义体外进行成员变量初始化或成员函数定义时,不再需要重复使用。

最后,static成员变量与non-static成员变量相比,主要有两点不同:

  1. static成员变量允许是incomplete type,也就是说,
class Foo {
private:
    static Foo a; //ok
    Foo b; //not ok
}
  1. static成员变量可以作为成员函数的default argument。

最后的最后,关于C++类具体如何使用static变量及static函数,可参考这篇文章
关于C++类实例的内存分配,可参考这篇文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,491评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,958评论 18 399
  • 一直使用static,但没用总结过,时间一长概念总有点模糊,趁着这次机会总结一下。c++中:C++中static有...
    被代码淹没的小伙子阅读 3,452评论 0 0
  • C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通...
    yangqi916阅读 2,967评论 0 0
  • 生日快乐,我对自己说 终于终于大步跨过了本命年,迎来了25个生日,快了个乐~ 这一年很冲动,做了很多无人...
    JUAN27阅读 3,226评论 0 2