starcow hat geschrieben: ↑26.01.2022, 11:03
Achso x, y, w, h sind Komponenten von der SDL_Rect Struktur!
Exakt, Du benennst damit die Member, die Du initialisieren willst.
Dadurch wird also die Reihenfolge egal, in welcher ich den Komponenten der Struktur Werte zuweise?
Oder anders formuliert: Damit hat man eine Absicherung das mit .x = 50 wirklich x initialisiert wird - auch wenn durch die gegebene Reihenfolge in der Struktur, ohne spezifisches x = 50, eigentlich y initialisiert worden wäre, richtig?
Nein. Die Member, die Du initialisierst, müssen trotzdem in der Reihenfolge sein, in der sie in der Struktur stehen. Weil C++ Lifetime Scope Gedöns. Aber Du kannst Member auslassen, die werden dann default-initialisiert. Es ist aber primär ein Feature für den Menschen, nicht für die Maschine. Es macht den Unterschied zwischen
Code: Alles auswählen
SomeStruct stuff{ .x = 13, .y = 25, .w = 43, .h = 36 };
und
Was bedeutet jetzt was? Wenn jetzt eine Kollegin die Codebase liest, sieht sie in V1 sofort, was es bedeutet.
Ich nehme Designated Initialization inzwischen ganz gerne.
Ich nehme an, dieses Feature gibts nur unter C++ - und nicht für reines C?
Nein. Das gibt's seit Ewigkeiten in C. Und es ist mit C++17 oder 20 erst für C++ nachgepflegt worden, weil's da halt viel mehr Corner Cases und Ärger geben kann.
Was ist den der Vorteil, wenn die Sprache so viele Arten der Initialisierung von Strukturen erlaubt? Habe mr die verlinkte CPP-Referenzseite eben angesehen. Das sind doch schon einige... Läuft man da nicht Gefahr, dass eine Sprache dadurch verwässert wird?
Jupp. C++ wird inzwischen für Leute entwickelt, die das seit 10+ Jahren machen. Neulinge sterben einen Heldentod, würde ich vermuten.
Im Ernst... Ein anderer Grund kann einem da jetzt nicht wirklich einfallen? Aber dies kann wohl nicht der tatsächliche Grund gewesen sein. Eine solche Prämisse wäre doch entgegen jeglicher Sprach-Design-Grundsätze!
Es ist nur Syntax. Ich hege da keine Gefühle. Ich mach es ganz gern bei irgendwelchen Enums oder Arrays, die ich gelegentlich mal erweitern muss. Da isses einfach bequem, am Ende gefahrlos ein Komma hängenlassen zu können.