Frage zur Wertinitialisierung bei Vektoren
-
Hi,
im dem Buch hier
wird auf Seite 123 zum Thema folgendes geschrieben, was ich leider nicht ganz verstehe:
(Zitat gekürzt, aber sinngemäß)
C++ Primer schrieb:
Wenn kein Initialisierer für ein Element angegeben wird, legt die Bibliothek einen mit einem Wert initialisierten Elementinitialisierer an, der die einzelnen Elemente im Container initialisiert. Sein Wert hängt vom Typ der gespeicherten Elemente ab.
Wenn der Vektor Elemente eines integrierten Typs enthält, beispielsweiseint, legt die Bibliothek einen Initialisierer mit dem Wert 0 an:vector<string> fvec(10); // 10 mit 0 initialisierte ElementeWenn er Werte eines Klassentyps wie zum Beispiel
stringenthält, der eigene Konstruktoren definiert, verwendet die Bibliothek den Standardkonstruktor des Werttyps zum Anlegen des Elementinitialisierers:vector<string> svec(10); // 10 Elemente, alle leere StringsDas verstehe ich, wie gesagt, nicht so richtig.
Woher soll die Bibliothek denn alleine vom Variablennamen (fvec, svec) wissen, welchen Typ von Vektor ich nun angelegt habe?Grüße, NewProggie
-
Da ist anscheinend ein Fehler (entweder im Buch oder in deiner Abschrift) - das erste müsste, wenn man dem Text glauben soll, "vector<int> fvec(10);" heißen.
Und der Compiler erkennt nicht am Namen der Variablen, wie er sie initialisieren soll, sondern am Typ - genauer gesagt an den Template-Parametern, die du übergibst. Der erste Vector enthält int-Werte, deshalb wird er auch mit dem Dafaultwert für int's (0) gefüllt, der zweite Vector enthält std::string's, deshalb wird der Default-Ctor von string verwendet, um die Elemente zu initialisieren.
-
CStoll schrieb:
Da ist anscheinend ein Fehler (entweder im Buch oder in deiner Abschrift) - das erste müsste, wenn man dem Text glauben soll, "vector<int> fvec(10);" heißen.
Und der Compiler erkennt nicht am Namen der Variablen, wie er sie initialisieren soll, sondern am Typ - genauer gesagt an den Template-Parametern, die du übergibst. Der erste Vector enthält int-Werte, deshalb wird er auch mit dem Dafaultwert für int's (0) gefüllt, der zweite Vector enthält std::string's, deshalb wird der Default-Ctor von string verwendet, um die Elemente zu initialisieren.
Ich danke dir

Ich hab nämlich schon vermutet, dass hier ein Druckfehler im Buch ist, war mir aber nicht so sicher, weil man (ich) ja immer erstmal von der Unfehlbarkeit eines Lektors ausgeht
Grüße, NewProggie
P.S: Ich habe den Abschnitt richtig abgeschrieben und nochmal überprüft, deswegen gehe ich hier einfach von einem Druckfehler aus