Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Returning inline defined structure with uninitialised member. C++

Tags:

c++

struct

c++17

This questions received too little attention in forums.

It has been asked before but no one captured this little detail. As a result I am not sure if I am doing the right thing:

Simple example:

struct TEST {
    bool a;
    int b;
};

TEST func() {
    return { false };
}

Is this correct? Note that int value is not initialized. While it would not be a problem to just set it to 0, more problems arise:

struct _FILE_MUTEX {
    bool locked;
    HANDLE handle;
};

And the last member of the structure could become more and more complex from vector,arrays to function pointers.

Can I leave some of the members empty when returning an inline-initialised structure?

like image 297
sergiu reznicencu Avatar asked Aug 12 '26 17:08

sergiu reznicencu


1 Answers

This is called aggregate initialization.

https://en.cppreference.com/w/cpp/language/aggregate_initialization

If the number of initializer clauses is less than the number of members and bases (since C++17) or initializer list is completely empty, the remaining members and bases (since C++17) are initialized by their default member initializers, if provided in the class definition, and otherwise (since C++14) by empty lists, in accordance with the usual list-initialization rules (which performs value-initialization for non-class types and non-aggregate classes with default constructors, and aggregate initialization for aggregates). If a member of a reference type is one of these remaining members, the program is ill-formed.

Thus, in aggregate initialization you allowed to provide less clauses than members in structure. Every remaining member (e.g. X), that doesn't have default initializer, would be initialized as X{}.

like image 58
Daniel Z. Avatar answered Aug 14 '26 11:08

Daniel Z.



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!