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