Designated Initializers gültiges C++?
-
Eine Initialisierung der Art
struct S {int a; }; int main() { struct S s = {.a=12}; (void)s; return 0; }Nennt man soweit ich weis designated Initializer und wurde mit C99 eingeführt. Ist das auch Teil eines C++ Standards oder zumindest geplant?
-
...
-
Dann ist also dieser Bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55227 eigentlich kein Bug, sondern der Bug ist, das es früher funktioniert hat bzw. immer noch teilweise funktioniert?
-
TNA schrieb:
Dann ist also dieser Bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55227 eigentlich kein Bug, sondern der Bug ist, das es früher funktioniert hat bzw. immer noch teilweise funktioniert?
Der gcc verhält sich Standardkonform, wenn er es nicht implementiert.
Ob es ein Bug ist kann man aus dieser Information aber nicht schließen.
-
Ich habe hier noch legacy Code rumliegen der ein Array von structs anlegt und initialisieren, in etwa so:
struct S { int a; int b; char name[10]; }; static const S DefaultS[] = { { .a = 10; .b = 12; .name = "blah"; }, { .a = 11; .b = 14; .name = "blah2"; }, { .a = 33; .b = 55; .name = "blah3"; }, };In Wirklichkeit natürlich sehr viel komplexer. Wie bekommt man das am besten C++ kompatibel, ohne das Memorylayout zu ändern? Natürlich könnte man die Bezeichner weglassen, aber das würde ich gerne vermeiden, da dies als zu unübersichtlich und fehleranfällig angesehen wurde.
-
Natürlich könnte man die Bezeichner weglassen, aber das würde ich gerne vermeiden, da dies als zu unübersichtlich und fehleranfällig angesehen wurde.
Vorschlag: Bezeichner auskommentieren. Dann funktioniert die Aggregate Initialization und es ist noch übersichtlich.
-
Arcoth schrieb:
Vorschlag: Bezeichner auskommentieren. Dann funktioniert die Aggregate Initialization und es ist noch übersichtlich.
Das haben wir als schnellen Fix auch schon versucht, hat aber den ANchteil, daß die Reihenfolge entscheidend ist, was bei den extrem großen structs die wir teilweise benutzen sehr fehleranfällig und aufwändig ist.
-
...
-
Eventuell ist einer dieser Ansätze für dich nützlich.