C++11 Richtige Struktur-Initialisierung
Dass eine Struktur, wie dies in C++11:
struct von
{
std::string Name;
unsigned int ID;
std::vector<std::string> Checks;
};
Sollte es initialisiert werden wie diese:
von v = {"",0,{}};
Oder so:
von v = {};
Beide Möglichkeiten scheinen zu funktionieren, aber der compiler warnt vor über -Wmissing-field-Initialisierungen auf die Letztgenannte Beispiel.
Edit: Hier sind meine compiler-Optionen: g++ main.cpp -ansi -Wall -Wextra -Weffc++ -std=c++0x. Ich bin mit g++ (Debian 4.6.2-12) 4.6.2
- Es gibt keine Initialisierer-Listen in deinem Beispiel, nur eine Liste der Initialisierung. Der beste Weg könnte sein
von v{};
. - von v{}; auch beklagt sich über die fehlende Initialisierungen für die Mitglieder. Es ist ein -Wmissing-field-Initialisierer Warnung.
- Hm, du hast Recht. Es ist eine Schande, man kann nicht value-initialisiert eine automatische variable...
von v{{},0,{}};
ist die nächste beste Sache. - Bitte machen Sie Ihre Titel, die die Frage beschreiben.
- Im Falle von null Argumente, ich persönlich denke, dass die Warnung von
-Wmissing-field-initializer
übermäßig pedantisch. - Vereinbarte, aber nicht nur dann, auch in dem Fall von einem einzigen Wert 0.
- Ich habe g++ 4.6.2, die keinerlei Unterstützung für C11. Ihr code wird kompiliert ohne Warnung mit
g++ -Wall -pedantic --std=c++0x
. Was compiler und Optionen für die Befehlszeile verwenden Sie? - -Wextra bewirkt es ich glaube
- Warnung für leere Initialisierungsliste Fall ist ein false positive das Problem wurde behoben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies erfordert nicht initializer_list und arbeiten völlig in Ordnung, mit C++03. Edit: (Ok, bei der Initialisierung des Vektors müssen Sie C++11) In einem struct oder array-Initialisierung werden alle nicht explizit angegebenen Werte werden auf null initialisiert, so dass, wenn das ist, was Sie wollen = {}; funktioniert wunderbar.