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前构造。(跟局部变脸光属性类似)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)