I 类的非static 的const成员变量的初始化
只有1种方法:
class CostEstimate {
public:
CostEstimate();
private:
const double FudgeFactor;
};
只能在构造函数的初始化列表中进行:
//class.cpp
CostEstimate::CostEstimate() : FudgeFactor(10.2) {}
II 对于类的非const的static成员变量的初始化
也只有1种方法:
class CostEstimate {
public:
CostEstimate();
private:
static double FudgeFactor;
};
如果我们还是使用构造函数的初始化列表,编译器友好地提示我们:double CostEstimate::FudgeFactor' is a static data member; it can only be initialized at its definition|
也就是说不能使用构造函数的初始化列表,来对类的非const的static成员变量,进行初始化。当然,初始化之后,你当然可以在构造函数中对其进行另行赋值操作。
只能在类的实现文件中初始化,此时,不要加static。
//class.cpp
double CostEstimate::FudgeFactor = 10.2;
III 对于类的 static const成员变量的初始化
有2种方法进行初始化
//class.h
class CostEstimate {
public:
CostEstimate();
private:
static const double FudgeFactor = 10.2;
};
- 可以在头文件中直接初始化,如上面代码所示;
- 还可以在类的实现文件中进行初始化,这时也不要加static,如下面代码所示。
//class.cpp
const double CostEstimate::FudgeFactor = 10.2;
总结
综上所述,static成员变量不能在构造函数的初始化列表中进行初始化,最好是在类的实现文件中进行初始化,此时不要加static。
而非static的const成员变量则要在构造函数的初始化列表中进行初始化。
对于static const成员变量,除了在类的实现文件中初始化之外,还可以在类的头文件中直接初始化。