Die Aggregationsinitialisierung initialisiert die Datenelemente eines Aggrete-Klassenobjekts, während die Wertinitialisierung eines Aggregats zuerst die Null initialisiert, wobei auch Füllbytes ausfüllt, wie das folgende Spezifikationszitat zeigt
Wenn T ein (möglicherweise cv-qualifizierter) Nicht-Union-Klassentyp ist, wird jedes nicht statische Datenelement und jedes Basisklassen-Unterobjekt auf Null initialisiert, und das Auffüllen wird auf Null Bits initialisiert;
Bedeutet dies, dass man im Allgemeinen vermeiden sollte, Aggregatstrukturen mit ()
zu initialisieren und stattdessen {}
vorzuziehen, weil letzteres nicht sicherstellen muss, dass Füllbits Null sind?
Wenn die obige Antwort "nein" lautet, gibt es Fälle, in denen Implementierungen kein Füllzeichen mit {}
, aber mit ()
füllen? Und was ist unter diesen Fällen die bessere Wahl für den Programmierer?
Nein. Erstens vermute ich, dass die meisten Compiler tatsächlich initialisieren ein Aggregat (mit konstanten Argumente) mit einem einzigen Wert (einschließlich Padding) sowieso .
Aber der wichtige Grund, warum nicht, ist, dass diese Art der Mikrooptimierung so lange bestehen bleibt, bis Sie Messungen haben, die zeigen, dass es ein Problem gibt (und ich wette, Sie werden diese Messungen nie erhalten). In der Zwischenzeit schreibe, was am deutlichsten ist.