c++ static修饰变量、函数、对象、数组

static相关语法

预备知识

  • 静态存储区:全局变量和static变量,在静态数据区,内存中所有的字节默认值都是0x00,所以全局变量和static变量的初始值都是0。

一、static 修饰变量

修饰局部变量

  • 局部static变量相对局部普通变量来说,生命周期延长了,同时局部static变量只允许被初始化一次。(生命周期
  • 类中static变量在类外初始化。可以通过 类名::变量名 访问,也可以通过 对象::变量名 访问。

修饰全局变量

  • 全局静态变量和全局普通变量的存储方式一样,都是静态存储;但是全局普通变量的作用域是整个源程序,其他源文件也可以访问,而static全局变量作用域是本文件(const修饰的变量可以通过extern来对外暴露);另外static全局变量只初始化一次。(作用域

修饰类中变量

  • 类中的变量可以被类和对象访问,初始值为0,可以在类外赋初始值。(跟局部变量属性类似)
  • 由于static变量不属于任何一个对象,因此不会再构造函数中赋值,初始值是静态区的默认值0,后面需要在类外赋初值
  • 当static const一起修饰时,可以在类中赋初始值

内存初始化时机

全局变量、静态全局变量和类的静态成员变量在main执行之前的静态初始化过程中分配内存并初始化;
局部静态变量(一般为函数内的静态变量)在第一次使用时分配内存并初始化

二、static修饰函数

修饰普通函数:全局静态函数

  • 全局静态函数 相对于普通函数,作用域只限制在本文件中;而普通的全局函数默认是extern的,其他源文件也可以访问。

修饰类中的函数:静态成员函数

  • 静态成员函数 只能访问或修改静态成员变量和函数, 不会访问或者修改任何对象非static数据成员。因为类的静态成员变量和函数在类加载的时候就会分配内存,而非static成员属于对象,在对象创建的时候才会分配内存。
  • static成员函数不能被const修饰

三、static修饰类对象

  • 普通对象可以通过extern跨文件访问,静态对象本文件访问
  • 静态对象如果在函数内,执行的时候才会构造,在函数外,全局static类对象在main前构造。(跟局部变脸光属性类似)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值