C++static关键字的作用

C++中static关键字主要在以下场景中用到

一、static修饰全局变量和局部变量

    全局变量属于数据,它如果被初始化为0或者不初始化则存放在.bss段,如果初始化不为0,则存放在.data段。如果是字符串常量则存放在.rodata段

1、普通全局变量和static全局变量的区别

 (1) 普通的全局变量经过编译之后会产生一个gloab的符号,在链接阶段其他的.obj文件是可以看到的,这样的符号要参与链接过 程的符号解析

  (2)static全局变量经过编译之后产生一个local符号,在链接阶段其他的文件不可见,并且也不参与链接过程的符号解析,在多个源文件中定义同名的static全局变量,不会产生重复定义的错误

2、普通局部变量和static局部变量

  (1)普通的局部变量属于指令,存放在.text代码码段上,运行时系统给函数在栈上分配空间,此时函数的局部变量也是栈上的一段内存,在函数运行结束后这个栈帧就会回退了

   (2)static局部变量属于数据,如果存放在.data或.bss段上,程序一运行起来它就有了内存,第一次运行到它的时候进行初始化,整个进程结束它的内存才会被释放

二、static修饰普通函数

   static修饰普通函数和上面static修饰全局变量是一样的,编译之后产生一个local符号,也就是只能在当前.obj文件可见,不参与链接的符号解析,因此其他文件不能链接这个文件中的static函数

三、static修饰成员方法和成员变量

   (1)static修饰成员方法后这个成员方法就变成了静态成员方法,它的形参中没有this指针了,也就是说它的调用不再依赖于对象了,调用的时候通过类的作用域来调用就可以了

   (2)static修饰成员变量之后这个变量成为了静态成员变量,同样的它的访问通过类的作用域就能够访问,也就是它也不再依赖对象了,此时这个成员变量就不再属于某个对象了,相当于是类作用域下的全局变量

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值