相比于C,C++对静态变量/函数有着自有的一些意义:
1、全局静态变量(只在本文件中生效的全局变量,此时即使在其他文件extern
也只是编译器通过,链接器不被通过)被弃用
2、静态函数被弃用
3、静态局部变量仍然像C一样有着自己的内存
4、静态成员变量
5、静态成员函数
对于静态的对象,相对于普通静态变量,它只有一次构造。像下面my_X
对象,如果不满足if条件,则不会构造该对象,也就不会产生析构。
这里提一下全局对象:值得注意的是,全局对象的构造在main()
函数之前,并且只构造一次。
在这里,要注意的是,在多个.cpp文件中的全局变量在初始化时,没有固定顺序,所以要实现跨文件的全局变量顺序初始化是不能做到的,在含有依赖关系的全局变量需要放在一起初始化,或者,像Java一样,直接不用全局变量。
静态成员变量、函数
对于类创建的对象来说,含有静态成员变量的类声明,就意味着这个成员变量是全局变量,而且这个变量每个类只有一个,像下面的a和b,两个对象的i是一样的。
另外,类中的全局变量必须要定义在类外部的.cpp
文件,因为编译器并不知道它在哪里。
此外,初始化列表不能初始化静态变量,像下面这种是不对的,但可以在int A::i = 20
处初始化变量值。
还有就是静态成员变量也需要遵循private不能外部访问的原则。
对于静态成员函数,一般特性如同静态成员变量一样,可以在没有创建对象之前,访问和使用它们,但静态成员函数只能访问静态变量。
另外,下面这种写法的静态成员函数是不对的,因为在类没有创建对象之前,是不存在this
这一概念的。