关键字static

static的作用

关于static的作用简单来说就是四个:

隐藏
保持变量内容的持久
初始化为0
C++类成员声明

隐藏

个人认为最重要的,也是最常用的,应该是隐藏,我的理解的限制使用范围,在一个cpp中,定义的一个全局变量或者函数,不希望其他cpp使用的时候,就可以加static,就不用担心命名冲突了。

保持变量内容持久

静态数据区在程序开始的时候就完成了初始化,静态变量和全局变量都是放在全局数据区,静态区,程序结束时释放。
所有对于静态变量,程序开始好就一直存在,直到程序结束,而static修饰的变量和全局变量不同的就是static的变量是有范围的。

初始化为0

这一属性和全局变量是一样的,因为数据保存在静态区,而静态区的所有字节默认值都是0x00,所以初始化都是0。

C++类成员声明

在类中声明static变量或者函数时,初始化时使用作用域运算符来标明它所属类,因此静态数据成员是类的成员,而不是对象的成员,所以具有以下作用:

它没有this指针,它是属于类,而不属于对象,同时静态函数只能访问静态变量。
静态函数不能定义为虚函数
由于静态成员声明在类中,操作在类外面,所以对它的取地址操作有一些特殊,变量地址指向的是它的数据类型的指针,而函数时一个“non-member函数指针”
(这个没懂,没找到资料,找到了在补全)由于没有this指针,所以就差不多等同于non-member指针,结果就产生了一个好处,成为callback函数,是的我们可以将C++和C-based X Windows系统结合,同时成功的应用于线程函数身上。
static并没有增加程序的时空开销,相反它还缩减了子类对父类静态成员的访问时间,节省了子类的内存空间。
静态成员变量是在定义或者说明时前面加static
静态数据是静态存储的,所以必须对他进行初始化
静态变量和普通变量初始化不同,初始化在类体外进行,前面不加static
为了防止父类影响,可以在子类中定义一个与父类相同的静态变量,以屏蔽父类的影响。这里有一点需要注意:我们说静态成员为父类和子类共享,但我们有重复定义了静态成员,这会不会引起错误呢?不会,我们的编译器采用了一种绝妙的手法:name-mangling 用以生成唯一的标志。

信息来源参考:
https://www.cnblogs.com/songdanzju/p/7422380.html
https://www.cnblogs.com/XuChengNotes/p/10403523.html
https://blog.csdn.net/weixin_40311211/article/details/82851300
https://blog.csdn.net/n1314n/article/details/90709895

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值