C++中static关键字作用总结——学习笔记

C++中static关键字作用总结

原文链接

1. static保持变量内容的持久

内存分为四区:代码区、全局区、栈区、堆区。 其中全局区用于存放全局变量和静态变量以及常量。因此还可细分为静态数据区和常量区。

存储在静态数据区的变量会在程序刚开始运行就完成的唯一一次初始化。static局部变量在函数内定义时,虽然其生存期为当前整个源程序运行过程,但作用域和不加static时一样(只在函数内部)。

2. 默认初始化为0(static变量)
其实全局变量也具备这一属性,静态数据区内存中所有字节值都是0x00,因此如果定义成静态的就可以省去了一开始置零的操作。(比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加‘\0’;太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是‘\0’;)

(1)static
作用域 : 当前“源”文件中,其他文件无法访问
生命周期:整个程序运行过程
(2)全局变量
作用域: 所有的“源”文件中,在一个文件中定义,其他文件使用时,使用extern 进行声明,告诉编译器,去其他的地方找这个变量的定义
生命周期:整个程序运行过程

3. 隐藏。(static函数,static变量均可)
若全局变量前加上static,那么其他文件将无法访问此变量。

4.static的第四个作用:C++中的类成员声明static
在类中声明static变量或者函数时,初始化时使用作用域运算符来标明它所属类(类内声明,类外初始化),因此,静态数据成员是类的成员,而不是对象的成员,这样就出现以下作用:

(1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。

(2)不能将静态成员函数定义为虚函数。

(3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊 ,变量地址是指向其数据类型的指针 ,函数地址类型是一个“nonmember函数指针”

(4)static并没有增加程序的时空开销,相反它还缩短了子类对父类静态成员的访问时间,节省了子类的内存空间。

(5)为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响。这里有一点需要注意:我们说静态成员为父类和子类共享,但我们有重复定义了静态成员,这会不会引起错误呢?不会

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值