C++ Standardinitialisierung löscht nicht Variablen mit automatischem Speicher, warum die spezielle Behandlung für statische Speichervariablen?Warum Dateibereich statische Variablen müssen initialisiert werden?
War es etwas, das durch C und C++ definiert wurde, nur kompatibel sein müssen? Wenn das der Fall ist, entscheidet sich C für Null-Initialisierung?
Wenn ein Dateibereich statische Variablen mit einem Initialisierer bereitgestellt wird, werden sie zuerst initialisiert und dann wieder konstant/dynamisch initialisiert. Ist das nicht überflüssig? Zum Beispiel ist der folgende Code aus cppreference: http://en.cppreference.com/w/cpp/language/zero_initialization
#include <string>
double f[3]; // zero-initialized to three 0.0's
int* p; // zero-initialized to null pointer value
std::string s; // zero-initialized to indeterminate value
// then default-initialized to ""
int main(int argc, char* argv[])
{
static int n = argc; // zero-initialized to 0
// then copy-initialized to argc
delete p; // safe to delete a null pointer
}
In diesem Fall, warum n nicht auf argc direkt initialisiert werden?
EDIT: Ein Teil dieser Frage die Frage hier beantwortet wurde: Static variable initialization? Aber ich glaube nicht, dass es ein Duplikat ist, weil die Antworten in der anderen Frage nicht meine zweite Frage beantworten, dh. warum die 2-stufige Initialisierung. Übrigens sagt der Titel des anderen Beitrags nicht wirklich, was genau die Frage ist.
Siehe auch http://www.youtube.com/watch?v=48kP_Ssg2eY es ist ein Video von einer D-Konferenz, aber über C++ und über dieses Thema. – johannes
+1 auf dem Nicht-Duplikat. Wir versuchen herauszufinden, warum wir einen Valgrind-Befund für eine Variable erfassen, die im Dateibereich mit einem Anfangswert von 0 oder false deklariert ist. Die doppelte Initialisierung, die Sie diskutieren, kann die Ursache sein. Wir haben es in die Valgrind-Liste unter [Uninitialized access findings für nicht statische Dateibereichsvariablen, die initialisiert wurden?] Verschoben (https://sourceforge.net/p/valgrind/mailman/message/34369193/). – jww
Plus, das zitierte Duplikat ist eine Art von beschissen, offene Frage. Es fragt nach statischen Variablen in Java, C und C++. Die Antworten haben nicht den halben Wert von @ TonyDs Antwort unten. – jww