hide, share and long live
静态变量及函数
全局静态变量
在cpp文件中声明并初始化的全局变量,生命周期为整个对象的周期,在定义的cpp文件中可见
局部静态变量
在某个程序块中声明并初始化的全局变量,只初始化一次,在定义的程序块中可见,生命周期为整个对象周期。
静态函数
静态函数只能在本文件中使用。
类的静态成员变量(一处变处处变)
类的静态成员为类的所有对象共有,因此具有对象间通信、统计对象个数的作用。可以通过classname.variable
直接引用,不需创造对象实例。
1 | class Something{ |
那么我们应当如何访问静态成员变量呢?可以声明一个普通成员函数进行访问,但是这样需要构造具体对象,因此更好的方法是提供一个静态成员函数接口,专门用于访问静态成员变量。
类的静态成员函数(没有this指针)
有一些函数为类层面的方法,不属于任何一个对象,此时定义为静态成员函数,可以通过类名::方法名
直接使用,而不需要创建类实例。
- 非静态成员函数可以调用静态成员函数,反之不行。
- 静态成员函数能访问静态成员变量,不能访问非静态的成员变量。
1 | class Something{ |
声明为静态的作用
隐藏对象或函数
一个对象如果被声明为静态,那么只对本文件中的对象可见,因此如果另一个文件中声明了同样的对象和函数,那么不会造成命名冲突。不要在header中定义静态全局对象,因为每一个包含该header的文件都会创建一个对象实例,会导致奇怪的现象发生。我们一般在cpp文件中定义全局变量。同时,定义为全局变量时,优先考虑static。