17

我对类成员变量初始化感到困惑。

假设在我的 .h 文件中是:

class Test {

int int_var_1;
float float_var_2;

public:
       Test();
}

我的 .cpp 将是:

Test::Test() : int_var_1(100), float_var_2(1.5f) {}

现在,当我实例化一个类时,变量被初始化为 100 和 1.5。

但如果这就是我在构造函数中所做的全部,我可以在我的 .cpp 中执行以下操作:

int Test::int_var_1 = 100;
float Test::float_var_2 = 1.5f;

我对在构造函数中初始化变量或使用解析运算符之间的区别感到困惑。

这种使用范围解析在构造函数之外初始化变量的方法是否仅适用于静态变量,或者是否有一种方法也可以用于普通变量?

4

2 回答 2

21

你不能用一个代替另一个。如果成员变量不是静态的,则必须使用初始化列表(或构造函数主体,但初始化列表更适合)*。如果成员变量是静态的,那么您必须在定义中使用第二个块中的语法对其进行初始化。

* Als 正确指出,在 C++11 中,您还可以在声明中为非静态成员变量提供初始化程序:

class test {
   int data = 5;
};

将隐式添加到未明确提及data(5)的任何初始化列表中(包括隐式定义的默认构造函数)data

于 2012-08-29T02:45:31.367 回答
2

当您初始化非静态const变量时(在构造函数中),您应该使用第一种方法。这是您可以修改这些类型的成员变量的唯一方法(除非您使用的是 C++11)。

静态成员变量可以通过使用适当的范围解析运算符(在类之外)来初始化。

于 2012-08-29T02:43:53.607 回答