3 ms·
C++ isn’t C and has different structure semantics. Members are initialized in the order defined, which means you can write struct foo { int a = 0;
by gumby 3y ago
C++ isn’t C and has different structure semantics. Members are initialized in the order defined, which means you can write
struct foo {
int a = 0;
int b = a+1;
}
If the compiler just did the initialization in the order of declaration, regardless of the order in the initialization list this would not do what you expect:
struct obj {
int a;
int b;
}
int ival = 0;
auto o = obj {.b = ++ival, .a = ival};
o.a would not equal o.b.
I would like to have the initialization syntax of C because then one could reorder elements (say for packing reasons) and the designated initialization would “just work”…except it wouldn’t.
C++ designated initialization does buy you two things: 1- documentation, but more importantly 2- if you do reorder a struct or class data members the compiler will warn you that your initialization lists are now invalid rather than silently failing. I don’t know how to even find them all in a large code base any other way!