可以通过成员初始化列表初始化静态成员变量吗?

时间:2016-06-30 21:48:06

标签: c++

我尝试使用成员初始化列表初始化静态成员变量。但我得到了像

这样的错误
  

静态变量无法通过构造函数

初始化

例如,我的班级sample有一个y类型的静态成员变量int。我无法做到这一点:

sample(int a):y(a){}

为什么会这样?

2 个答案:

答案 0 :(得分:3)

静态成员变量不属于您的类的单个实例。因此,当构造函数(初始化实例的函数)运行时,静态成员已经初始化。你无法再次初始化它。

但是你可以在构造函数体中分配它:

sample(int a) {y = a;}

虽然这很少有用。

再次,请记住:每次构造函数运行时,它都会构造一个实例,而静态成员则存在于所有实例中。

答案 1 :(得分:0)

静态成员是每个类,而不是每个实例,因此静态成员只能在程序的生命周期中构造一次。每次创建类的实例时都会调用构造函数。

您要做的是初始化将在其中使用的.cc文件中的静态成员。

类似的东西:

// Foo.h

class Bar {
    public :
       Bar(int) {
       }

};

class Foo {
  public:
         static Bar MrStatic;
};

// Foo.cc

Bar Foo::MrStatic(10);