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)