Home > Software engineering >  Question about brace-initialization of data member array in constructor?
Question about brace-initialization of data member array in constructor?

Time:09-21

In the following class:

struct S {
    S() : B{} {}

    const uint8_t B[32];
};

Are all 32 bytes of the B array guaranteed to be initialized to zero by the default constructor?

Is there any way to create an object of type S such that any element of the B array is not zero? (without const casting or reinterpretting memory). Do all forms of initialization of S lead to a zeroed B array?

CodePudding user response:

Are all 32 bytes of the B array guaranteed to be initialized to zero by the default constructor?

Yes, B is value-initialized which for an array means each member is value-initialized - primitive types are value-initialized to 0.

Is there any way to create an object of type S such that any element of the B array is not zero?

Not as far as I know, although S still has the default copy constructor so if somehow you got an S with non-zero B, you can clone those objects.

  • const member guarantees the values cannot be changed throughout the lifetime, so any non-zero value must be set at initialization which leads to the third question...

Do all forms of initialization of S lead to a zeroed B array?

Yes, S is not an aggregate (due to user-provided ctor) so there is no way how to initialize the members directly.

  • Related