一-静态局部变量。
1.函数内的static变量的作用范围在该函数内,该变量只在内存中初始化一次,下次使用时依然维持以前的值,不再进行初始化的工作。因为static变量保存在全局数据区,而不是栈区,保持到下一次使用时依然有效。由于其保存在全局数据区,所以它的有效范围在局部函数内,但是生命周期却伴随着整个进程的生命周期的结束。
二-全局静态变量
1)未显示初始化的全局静态变量,系统会根据该静态全局变量的类型进行相应的默认初始化。
2)静态全局变量在声明它的整个文件是可见的,超出该文件的范围则是不可见的,既然是不可见,那么在另一个文件中则可以定义名字相同的变量。静态变量都保存在全局数据区。而全局非静态变量则是对整个工程而言是可以看见的,可以使用extern在外部文件中使用该全局变量。
三-静态函数
1) 其他文件中可以定义相同名字的函数,不会发生冲突。
2) 静态函数不能被其他文件所用。
四-静态成员变量
1)对于非静态数据成员,每个对象都有自己的一份拷贝。而静态成员变量无论定义了多少对象,其在程序中也只会有一份拷贝,也就是说所有的对象都可以访问该对象。
2)静态成员有普通成员变量的访问规则public,protected,private。
3)静态成员变量的初始化:
静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。这样,它的空间分配有三个可能的地方,一是作为类的外部接口的头文件,那里有类声明;二是类定义的内部实现,那里有类的成员函数定义;三是应用程序的main()函数前的全局数据声明和定义处。
五-静态成员函数
1)出现在类体外的函数定义不能指定关键字static;
2)静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
3)非静态成员函数可以任意地访问静态成员函数和静态数据成员;
4)静态成员函数不能访问非静态成员函数和非静态数据成员;
5)由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
优势
可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。