Explizite Initialisierung der struct/class-Mitglieder
struct some_struct{
int a;
};
some_struct n = {};
n.a wird 0 sein, nach dieser;
Ich weiß, das Klammern form der Initialisierung ist geerbt von C und unterstützt für die Kompatibilität mit C-Programmen, aber dies nur kompiliert mit C++, nicht mit dem C-compiler. Ich verwende Visual C++ 2005.
In C diese Art der Initialisierung
struct some_struct n = {0};
richtig ist, und null-initialisiert alle Mitglieder einer Struktur.
Ist das leere paar Klammern form der Initialisierung standard? Zuerst sah ich diese form der Initialisierung in einem WinAPI-tutorial vom msdn.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den leeren Klammern form der Initialisierung ist standard in C++ (es ist zulässig, ausdrücklich von der Grammatik). Sehen C Statische Array-Initialisierung - wie ausführlich muss ich sein? für mehr details, wenn Sie interessiert sind.
Ich gehe davon aus, dass es Hinzugefügt wurde, auf C++, da es möglicherweise nicht geeignet für ein 0-Wert für einen Standard-init-Wert in allen Situationen.
Ist es standard in C++, nicht C.
Die syntax, die eingeführt wurde, auf C++, da einige Objekte können nicht mit 0 initialisiert, und es würde keine generische Methode zur Durchführung von Wert-Initialisierung von arrays.
Den {0} ist C99 offenbar.
Andere Art und Weise zu initialisieren, die in C89 und C++ - konformen Art und Weise ist dieser "trick":
struct some_struct{
int a;
};
statische some_struct zstruct;
some_struct n = zstruct;
Dieser nutzt die Tatsache, dass statische Variablen sind vor der mit 0 initialisiert ' ed Speicher, im Gegensatz zu Erklärungen, die auf dem stack oder heap.
{0}
ist gültig für C89 zu.Ich finde den folgenden link sehr informativ über diese Frage