Initialization of Built-in Types by the Default Constructor
In C , the default constructor is implicitly defined by the compiler for classes that do not have an explicitly declared constructor. Does this implicit default constructor automatically initialize members of built-in types?
Answer
No, the implicitly defined default constructor does not initialize members of built-in types. However, it's important to note that class instances can be initialized in other ways.
Value-Initialization vs. Default Constructor
Commonly, the syntax C() is assumed to invoke the default constructor. However, in certain cases, it performs value-initialization instead. This occurs if a user-declared default constructor doesn't exist. Value-initialization directly initializes each class member, resulting in zero-initialization for built-in types.
For example:
class C { public: int x; };
If no user-declared constructor is defined, C() will use value-initialization:
C c; // c.x contains garbage
Explicit Value-Initialization
Explicit value-initialization using (), as seen in the following code, will zero-initialize x:
C c = C(); // c.x == 0 C *pc = new C(); // pc->x == 0
Aggregate Initialization
Aggregate initialization can also initialize class members without using a constructor:
C c = {}; // C++98 C d{}; // C++11 // c.x == 0, d.x == 0
Therefore, while the default constructor does not initialize built-in member types, alternative initialization methods exist in C .
The above is the detailed content of Does C 's Implicit Default Constructor Initialize Built-in Type Members?. For more information, please follow other related articles on the PHP Chinese website!