static关键字的用途主要分以下几种:
- 静态全局变量(类外)
- 静态局部变量(类外)
- 静态函数(类外)
- 静态成员函数(类内)
- 静态成员变量(类内)
静态全局变量(类外):
代码示例:
int
使用方法:函数外,文件内,修饰变量
内存:静态全局变量存储在全局数据区
作用域:静态全局变量的作用域是声明该变量的整个文件,离开这个文件,该变量不能使用
与全局变量的区别:全局变量可以在不同文件中共享,但静态全局变量只能在声明变量的文件中使用
静态局部变量(类外):
int
使用方法:函数内,修饰变量
内存:静态局部变量存储在全局数据区
作用域:静态局部变量的作用域是在函数内
与普通变量的区别:
- 普通局部变量存储在栈中,函数结束,变量就会被释放。
- 静态局部变量在第一次使用时,在全局数据区分配该变量,直至程序结束,该变量才会被释放。
用途:函数中某个变量的执行结果可以保存到函数下次被调用的时候
静态函数(类外):
static
使用方法:在文件内,修饰函数
内存:静态函数和普通函数一样,都存储在代码区
作用域:静态函数的作用域是在当前文件内
与普通函数的区别:
- 普通函数可以在其他文件内使用
- 静态函数只能在当前文件内使用
用途:函数中某个变量的执行结果可以保存到函数下次被调用的时候
静态成员函数(类内):
class
使用方法:在类内,修饰成员函数
内存:静态成员函数存储于代码区
作用域:静态成员函数通过类的方式调用,如TestClass::testFun()
与普通成员函数的区别:
- 普通成员函数可以通过对象来调用,但静态成员函数只能通过类的方式调用
- 普通成员函数有一个隐式参数,this,指的是当前对象,但静态成员函数没有该参数,因为静态成员函数是所有类共享的函数。
用途:单例模式可以通过静态成员函数实现。
静态成员变量(类内):
class
使用方法:在类内,修饰成员变量
内存:静态成员变量存储于全局数据区
作用域:静态成员变量只能在类的方式调用
与普通成员变量的区别:
- 普通成员变量存储在堆中或栈中(根据该对象实例方式决定),与所在的对象的生命周期保持同步。普通成员变量是属于对应的对象。
- 静态成员变量存储于全局数据区,第一次使用时在全局数据区创建,直至程序结束。静态成员变量可供类的所有对象共享。
用途:设置相同类不同对象之间的共享变量。
总结
关注微信公众号"二进制空间",与作者进行交流,并会免费分享从网络上收集整理的上百本C++电子书和全套C++视频学习资料:
http://weixin.qq.com/r/zC3bw83EWJAnrYmg93je (二维码自动识别)