C++中static关键字有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数;后者应用于类中。
面向过程程序设计中的static
静态全局变量
全局变量前加static,该全局变量即被定义成为一个静态全局变量。
静态全局变量特点:
(1)在全局数据存储区分配内存;
(2)未经过初始化的静态全局变量被初始化为0(没有被初始化的自动变量的值是随机的);
(3)静态全局变量在声明它的整个文件是可见的,在文件外不可见;
(4)静态变量在程序开始时分配空间,结束时释放空间。
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
对于一个完整的程序,内存包括:代码区,全局数据区,堆区,栈区。
由new产生的动态数据放在堆区,函数内部的自动变量放在栈区。自动变量会随着函数的退出而释放空间。函数内部的静态局部变量存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放。
面向对象程序设计中的static
类的静态成员是该类所有实例的共用成员,也就是在该类的范畴内是个全局变量,,因为它是在程序初始化的时候分配的,所以只分配一次,所以就是共用的;
类的静态成员必须初始化,(初始化必须在类外,只有const static int i既可以在类内又可以在类外)
类的静态函数是在该类的范畴内的全局函数,不能访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用.
不能够将静态函数设置为虚函数。
参考:
[1] https://www.cnblogs.com/BeyondAnyTime/archive/2012/06/08/2542315.html
[2] http://www.cnblogs.com/youxin/archive/2012/05/17/2506757.html