Do Built-in Types Get Initialized by C 's Default Constructor?
In C , the implicit default constructor generated by the compiler is responsible for initializing class members. However, there's a common misconception that this behavior extends to built-in types.
Default Initialization Behavior
The implicit default constructor does not initialize members of built-in types. When such a constructor is used without user-defined initialization, the members of built-in types remain uninitialized.
Exceptions to the Rule
While default constructors typically do not initialize built-in types, there are certain circumstances under which initialization may occur:
Value Initialization:
In C 03 and later, the syntax C() invokes value-initialization for class instances. If the class has no user-declared constructor, value-initialization will zero-initialize built-in type members.
Aggregate Initialization:
Aggregate initialization syntax, such as C c = {}, performs initialization without using a constructor. This results in zero-initialization of built-in type members.
Example:
Consider the following class without a user-declared constructor:
class C { public: int x; };
Without Explicit Initialization:
C c; // Compiler-provided default constructor used // c.x contains garbage
With Explicit Value Initialization:
C c = C(); // Value-initialization used assert(c.x == 0);
With Aggregate Initialization:
C c = {}; // Aggregate initialization assert(c.x == 0);
It's important to note that the behavior described above may vary depending on the version of C used and the specific class definition.
The above is the detailed content of Do C 's Default Constructors Initialize Built-in Types?. For more information, please follow other related articles on the PHP Chinese website!