I am trying to understand when the initialization list is referenced (involved) during base class and class non-static member instantiation. I have read this article and this article that summarizes the initialization order of a class (I have summarized it here)
Initialization shall proceed in the following order:
First, and only for the constructor of the most derived class as described below, virtual base classes shall be initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base classes, where “left-to-right” is the order of appearance of the base class names in the derived class base-specifier-list.
Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list (regardless of the order of the mem-initializers).
Then, nonstatic data members shall be initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers). Finally, the body of the constructor is executed.
Finally, the body of the constructor is executed.
Now I understand by reading the above is that the base classes are created first and then the derived class. Also members are instantiated in the order they were declared in the class definition regardless of their position in the initialization list order.
This makes me think that every time a base class or a member variable during class instantiation is being instantiated (in the order specified above) C++ basically checks the initialization list of a class to see if any specific parameter or argument has been specified for that base class or member variable. If nothing has been specified then c++ does a default constructor call. Is my understanding correct. Please correct me if I am wrong.