我对类成员变量初始化感到困惑。
假设我的.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;
我对构造函数中的变量初始化或解析运算符之间的区别感到困惑。
这种在构造函数外部使用范围分辨率初始化变量的方法是否仅适用于静态变量,或者是否也可以对普通变量进行处理?
答案 0 :(得分:16)
你不能用一个代替另一个。如果成员变量不是静态的,则必须使用初始化列表(或构造函数体,但初始化列表更适合) * 。如果成员变量是静态的,那么必须使用第二个块中的语法在定义中初始化它们。
* Als正确地指出,在C ++ 11中,您还可以在声明中为非静态成员变量提供初始化器:
class test {
int data = 5;
};
将data(5)
隐式添加到未明确提及data
的任何初始化列表中(包括隐式定义的默认构造函数)
答案 1 :(得分:2)
初始化非静态const
变量时,应该使用第一种方法(在构造函数中)。这是您可以修改这些类型的成员变量的唯一方法(除非您使用的是C ++ 11)。
可以使用适当的范围解析运算符(类外)来初始化静态成员变量。