C++:成员变量的初始化

mad*_*adu 15 c++ constructor initialization

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

假设我的.h文件是:

class Test {

int int_var_1;
float float_var_2;

public:
       Test();
}
Run Code Online (Sandbox Code Playgroud)

我的.cpp会是:

Test::Test() : int_var_1(100), float_var_2(1.5f) {}
Run Code Online (Sandbox Code Playgroud)

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

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

int Test::int_var_1 = 100;
float Test::float_var_2 = 1.5f;
Run Code Online (Sandbox Code Playgroud)

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

这种使用范围分辨率在构造函数外部初始化变量的方法是否仅适用于静态变量,或者是否也可以对常规变量执行此操作?

Dav*_*eas 17

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

* Als正确地指出,在C++ 11中,您还可以在声明中为非静态成员变量提供初始值设定项:

class test {
   int data = 5;
};
Run Code Online (Sandbox Code Playgroud)

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

  • C++ 11允许静态成员的就地初始化(C++11§9.4.2.3) (4认同)
  • @Als:C++ 11允许**非** - 静态成员的就地初始化,并且语法不是第二个例子的语法,而是在成员的声明中. (2认同)