C ++ - Wert des nicht initialisierten Vektors & lt; int & gt;
Verstehe ich von der Antwort auf diese Frage, dass die Werte von Globale/statische nicht initialisierte int-0. Die Antwort auf diese eine sagt, dass für Vektoren, die default-Konstruktor für das Objekt-Typ aufgerufen werden.
Ich bin nicht in der Lage, herauszufinden, - was passiert, wenn ich vector<int> v(10)
in einer lokalen Funktion. Was ist der default-Konstruktor für int? Was, wenn ich vector<int> v(10)
Global definiert?
Was ich sehe ist, dass vector<int> v(10)
in einer lokalen Funktion, führt zu Variablen als 0 - aber ich bin mir nicht sicher, ob das nur wegen meinem compiler oder ist die fest erwartete Verhalten.
InformationsquelleAutor der Frage anon | 2011-03-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die null-Initialisierung angegeben ist, in der standard-als Standard-null-Initialisierung/Wert-Initialisierung für " builtin-Typen, in Erster Linie zur Unterstützung gerade dieser Art von Fall in Vorlage verwenden.
Beachten Sie, dass dieses Verhalten unterscheidet sich von einer lokalen Variablen wie
int x;
bleibt der Wert nicht initialisiert (wie in der C-Sprache, das Verhalten ist ererbt).InformationsquelleAutor der Antwort Mark B
Ist es nicht ein Undefiniertes Verhalten, ein Vektor automatisch initialisiert alle seine Elemente. Sie können wählen Sie einen anderen Standard, wenn Sie möchten.
Konstruktor ist:
vector( size_type, T t = T() )
und für int, ist der default-Typ (zurückgegeben von
int()
) ist 0.In einer lokalen Funktion:
int x;
nicht garantiert ist, initialisieren Sie die variable auf 0.
int x = int();
tun würde.
int x();
leider nicht, aber eine Funktion deklariert.
InformationsquelleAutor der Antwort CashCow
Den Konstruktor, den Sie verwenden tatsächlich nimmt zwei Argumente, von denen die zweite ist optional. Ihre Deklaration sieht wie folgt aus:
Das erste argument ist die Anzahl der Elemente zu erstellen, in der
vector
zunächst; das zweite argument ist der Wert, zu kopieren, in jedem dieser Elemente.Für jeden Objekttyp
T
,T()
wird als "Wert-Initialisierung." Für numerische Typen, es gibt Sie0
. Für eine Klasse mit einem Standardkonstruktor, es gibt Ihnen ein Objekt, das wurde Standard konstruiert, dass der Konstruktor.Weitere details über die "Magische Klammer" würd ich empfehle die Lektüre von Michael Burr ' s ausgezeichnete Antwort auf die Frage "Machen Sie die Klammern nach dem Typnamen einen Unterschied machen, mit neuen?" Es Wert beschreibt die Initialisierung, wenn verwendet mit
new
speziell, aber für den größten Teil gilt für Wert-Initialisierung überall dort, wo es verwendet werden kann.InformationsquelleAutor der Antwort James McNellis
Standardwert
int
null ist. Sovector<int> v(10)
wird initialisiert, alle 10 Elemente mit null!Ausgabe:
Laufen bei ideone: http://ideone.com/IbcyH
InformationsquelleAutor der Antwort Nawaz
Die Standard-Initialisierung für eine
int
Typ zu initialisieren es mit 0.Dies gilt für die meisten (wenn nicht alle) primitive Typen:
char
wird initialisiert, um(char)0
(oder'\0'
wenn Sie bevorzugen),float
wird initialisiert, um0.0f
, und alle Zeiger initialisiert, umNULL
. Für andere Arten, der parameterlose Konstruktor aufgerufen.Im Allgemeinen, die Standard-Initialisierung passieren sollte ziemlich viel, wenn Sie nicht in der Lage, geben Sie einen Konstruktor (oder nicht).
InformationsquelleAutor der Antwort Platinum Azure
Standardmäßig, vector-Elemente werden auf null initialisiert, und nicht default-initialisiert. Das sind zwei verschiedene, aber Verwandte Konzepte:
null-Initialisierung ist das, was getan wird für statische Objekte nicht mit einer expliziten Initialisierung und was ist zu tun für ein Mitglied in der initialisierten Liste mit einer Initialisierung von
()
. Für grundlegende Arten, den Wert 0 umgewandelt.default-Initialisierung ist das, was getan wird, für die nicht explizit initialisiert nicht-statische Variablen und Mitglieder. Für grundlegende Arten es bleiben nicht initialisiert.
(Und C++0X führt Wert-Initialisierung, die noch anders).
InformationsquelleAutor der Antwort AProgrammer