C++ static用法
C++ 中static关键字的用途共有五种,分别为静态全局变量、静态局部变量、静态函数和类静态成员变量,静态成员函数。
静态全局变量
定义在函数体外,使用static关键字修饰全局变量,该变量就被定义成为一个静态全局变量。区别于非静态全局变量,该静态全局变量只在本文件可见,非静态全局变量可通过extern在其他文件声明引用。
静态局部变量
定义在函数体内,生存期长于该函数。
静态函数
在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。
定义静态函数的用处:
静态函数不能被其它文件所用;
其它文件中可以定义相同名字的函数,不会发生冲突;
类静态成员变量
初始化在类体外进行,而前面不加static。c++对象内存布局中,对象包含非static成员和虚函数表指针,static成员独立于对象外。因此无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷 贝,由该类型的所有对象共享访问。
同全局变量相比,使用静态数据成员有两个优势:
静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性;
可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能;
类静态成员函数
静态成员函数由于不是与任何的对象相联系,因此它不具有this指 针
静态成员函数有特点:
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
非静态成员函数可以任意地访问静态成员函数和静态数据成员;
静态成员函数不能访问非静态成员函数和非静态数据成员;