Angenommen, ich habe eine C ++ - Struktur mit POD- und Nicht-POD-Membervariablen:
%Vor%und damit mein Programm reproduzierbares Verhalten erzeugt, möchte ich, dass alle Elementvariablen bei der Konstruktion initialisiert werden. Ich kann dafür eine Initialisierungsliste verwenden:
%Vor% Das Problem ist, sobald ich meine Struktur ändern und eine neue POD-Mitgliedsvariable hinzufügen muss (zB bool Bool
). Ich riskiere es zu vergessen, sie der Initialisierungsliste hinzuzufügen. Dann wird die neue Elementvariable während der Strukturkonstruktion nicht initialisiert.
Außerdem kann ich den memset()
Trick nicht benutzen:
, weil das Aufrufen von memset()
zum Überschreiben bereits konstruierter Nicht-POD-Member-Variablen diese unterbrechen kann.
Gibt es eine Möglichkeit, die Wertinitialisierung aller POD-Elementvariablen zu erzwingen, ohne in diesem Fall ihre Initialisierung explizit hinzuzufügen?
Der sauberste Weg wäre, die automatisch initialisierte Template-Klasse initialized<T>
:
BEARBEITEN: Mir ist klar, dass es jetzt noch flexibler gemacht werden kann, indem man initialized<Struct>
deklariert. Dies bedeutet, dass Sie die Initialisierung deklarieren können, ohne das ursprüngliche Struct
zu ändern. Die Standardinitialisierung 'T ()' wurde von Prasons Antwort inspiriert.
Dies wird kompiliert, benötigt aber möglicherweise mehr Konvertierungsoperatoren, die Handhabung von Schlüsselwörtern wie flüchtig, etc. Aber Sie bekommen die Idee.
Verknüpfte Frage hier
Gibt es eine Möglichkeit, die Wertinitialisierung aller POD-Elementvariablen zu erzwingen, ohne in diesem Fall ihre Initialisierung explizit hinzuzufügen?
Ich bin mir nicht sicher, ob so etwas möglich ist oder nicht, aber die folgenden Arbeiten
%Vor%Tags und Links c++ constructor initialization