简体   繁体   中英

C++: Initialization of member variables

I have a confusion on class member variable initialization.

Suppose in my .h file is:

class Test {

int int_var_1;
float float_var_2;

public:
       Test();
}

My .cpp would be:

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

Now when I instantiate a class the variables get initialized to 100 and 1.5.

But if that is all I'm doing in my constructor, I can do the following in my .cpp:

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

I'm confused as to the difference between initializing the variables in constructors or with the resolution operator.

Does this way of initializing variables outside constructor with scope resolution only apply to static variables or is there a way it can be done for normal variables too?

You cannot substitute one for the other. If the member variables are not static, you have to use the initialization list (or the constructor body, but the initialization list is better suited) * . If the member variables are static, then you must initialize them in the definition with the syntax in the second block.

* Als correctly points out that in C++11 you can also provide an initializer in the declaration for non-static member variables:

class test {
   int data = 5;
};

Will have data(5) implicitly added to any initialization list where data is not explicitly mentioned (including an implicitly defined default constructor)

You should use the first method when you are initializing non-static const variables (at the constructor). That is the only way you can modify those kinds of member variables (unless you are using C++11).

Static member variables can be initialized by using proper scope resolution operators (outside the class).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM