c++静态函数和静态成员


  1. 静态函数:在类内声明static,在类外定义时不能再用static,静态函数可以访问类的静态对象。
  2. 静态对象:静态对象不属于任何一个对象,所以他们并不是在创建类的对象时被定义的,也就是不能被构造函数初始化。要想定义全局变量一样定义静态对象。生命周期和全局变量一样。

通常,为了防止对象多次定义,最好把静态对象的定义放在定义文件,而不是头文件。但是也可以使用const或者constexpr来修饰static在类内定义一个常数。如果这个常数只是在类内使用,这么定义没问题,如果在类外需要使用这个常数,则必须在类内声明const static,在类外定义这个常数。

最好的做法是在类内初始化,也要在类外定义,但是类外定义不能带初始值。

静态对象可以是不完全类型,比如单例模式:

class C
{
private:
	static C x;
	int a,b,c;
    C(int a, int b, int c) : a(a), b(b), c(c) {}
public:
    C& get_instance()
    {
        return x;
    }
};
C C::x(1,2,3);//类外初始化

相关