sollte die bevorzugte Methode einer der folgenden sein beliebiger Typ von structName
oder wenn es keine Initialisierung durchführen kann, macht es das Programm schlecht formatiert (der Code kompiliert nicht) (plus es erlaubt keine Verengung)).
In Ihrer spezifischen Beispiel ist ein structName
Agregate:
C++14 draft standard:
§8.5.1 Aggregates [dcl.init.aggr]
(1) ein Aggregat ist, ein Array oder eine Klasse (Klausel 9) ohne von Benutzern bereitgestellte Konstruktoren (12.1), keine privaten oder geschützten nicht statischen Datenelemente (Klausel 11), keine Basisklassen (Klausel 10) und keine virtuellen Funktionen (10.3)
Die Initialisierung Syntax I verwendet wird List-Initialisierung genannt:
§8.5.4 List-Initialisierung [dcl.init.list]
(1) List-Initialisierung Initialisierung eines Objekts oder einer Referenz aus einer stained-init-Liste. [...] Eine Initialisierungsliste ist möglicherweise leer. [...
]
Für unser Aggregat bedeutet dies:
§8.5.1 Aggregates [dcl.init.aggr]
(2) Wenn ein Aggregat durch eine Initialisierungsliste initialisiert wird, wie In 8.5.4 angegeben, werden die Elemente der Initialisierungsliste als Initialisierer für die Mitglieder des Aggregats in aufsteigendem Index oder Mitgliedsreihenfolge verwendet. Jedes Mitglied ist kopier initialisiert vom entsprechend initializer-Klausel
(7) Wenn weniger Initialisierer-Klauseln in der Liste enthalten sind, als es Mitglieder im Aggregate, dann jedes Mitglied nicht explizit initialisiert wird von initialisiert werden sein brace-or-equal-initializer oder, wenn kein brace-or-equal-initializer ist, aus einer leeren Initialisierungsliste (8.5.4).
[Beispiel:
struct S { int a; const char* b; int c; int d = b[a]; };
S ss = { 1, "asdf" };
initialisiert ss.a mit 1, ss.b mit "asdf", ss.c mit dem Wert eines Expression des int Form {} (das heißt, 0) und ss.d mit dem Wert von ss.b [ss.a] (das heißt, 's')
[...]
Ende Beispiel]
Also alle diese gültig sind und tun genau dasselbe:
structName structVar = {};
structName structVar = {0};
structName structVar = {0, 0};
Allerdings, wenn es mindestens einen initializer-clauses
und weniger ist, als es Mitglieder in der Summe sind, gcc
und clang
eine Warnung abgeben. Es könnte sein, dass Sie alle Mitglieder initialisieren wollten, aber einige verpasst haben. Daher ist die leere Initialisierungsliste die sicherste Wahl.
Als Randnotiz struct
ist nicht in einer Erklärung benötigt und verwendet allgemein nicht. So ersetzen Sie diese:
struct structName structVar
mit:
structName structVar
@ 101010 Nein, nicht unbedingt. 'struct foo {foo() = Standard; foo (int) {}}; '. – juanchopanza
Und wie sieht Ihre Struktur aus? Hat es Konstruktoren? Destruktoren? –
In C++ müssen Sie überhaupt nicht "struct" schreiben, also frage ich mich, welche Ressource Sie gefunden haben, als Sie "im Internet" gesucht haben. Lieber C++ aus einem guten Buch lernen ... –