Initializer List
Non Empty Initializer List
Instantiating a class type with non-empty initializer list would call the constructor who accept a initilializer list if defined, otherwise, it would call the constructor whose number of parameters equals the size of initializer list.
Empty Initializer List
Instantiating a class type with empty initializer list won’t call the constuctors described above. Instead, it would initialize all Scalar type or C style array within the type to zero firstly, and then call class’s default constructor. In other words, it initilize all instance’s memory to zero first.