xmllmx xmllmx - 4 years ago 156
C Question

Why does C++11 not support designated initializer list as C99?

struct Person
{
int height;
int weight;
int age;
};

int main()
{
Person p { .age = 18 };
}


The code above is legal in C99 but not legal in C++11.

What's the rationale that C++11 doesn't support such a handy feature?

Answer Source

C++ has constructors. If it makes sense to initialize just one member then that can be expressed in the program by implementing an appropriate constructor. This is the sort of abstraction C++ promotes.

On the other hand the designated initializers feature is more about exposing and making members easy to access directly in client code. This leads to things like having a person of age 18 (years?) but with height and weight of zero.


In other words, designated initializers support a programming style where internals are exposed, and the client is given flexibility to decide how they want to use the type.

C++ is more interested in putting the flexibility on the side of the designer of a type instead, so designers can make it easy to use a type correctly and difficult to use incorrectly. Putting the designer in control of how a type can be initialized is part of this: the designer determines constructors, in-class initializers, etc.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download