kennen:initialisiererliste
Inhaltsverzeichnis
Initialisiererliste
Die Kindheit ist vorbei, wenn man bei der Augsburger Puppenkiste die Fäden sieht.— Bastian Sick [Zwiebelfisch]
Anfangswertbelegung
In C++98 mussten zum Befüllen von Containern Umwege in Kauf genommen werden.
double a[] = { 1.0, 2.718, 3.14 }; std::vector<double> v(a, a+3); // oder: std::vector<double> v; v.push_back(1.0); v.push_back(2.718); v.push_back(3.14);
Ab C++11 können wie bei Feldern Wertfolgen in geschweiften Klammern angegeben werden, wenn die Klasse unter Einbeziehen des Headers <initializer_list> einen Konstruktor
Klassenname(std::initializer_list<Element> sequenz);
definiert. Alle übergebenen Werte müssen vom selben (Ziel-)Typ sein.
std::vector<double> v = { 1.0, 2.718, 3.14 }; std::vector<int> v1 = { 5 }; // ein Wert: 5 std::vector<int> v2 = { 6, 7 }; // zwei Zahlen
Fehlt das Gleichheitszeichen, haben Initialisiererlisten Vorrang vor anderen Konstruktoren mit gleicher Parameteranzahl.
std::vector<int> v3{}; // leer std::vector<int> v4{ 5 }; // enthält einen Wert: 5 std::vector<int> v5{ 6, 7 }; // 2 Zahlen std::vector<int> v6(8); // 8 Einträge mit Standardwert 0 std::vector<int> v7(9,10); // 9 Einträge mit Wert 10
für auto-Variablen
Ab C++17 gilt eine neue Regel für die Anfangswertbelegung von auto-Variablen mit geschweiften Klammern.
auto i{42}; // neu: Ganzzahl; vorher: Liste mit einem Element auto j{1, 2}; // ist nun verboten auto k = { 1 }; // Liste mit 1 Element auto l = { 1, 2 }; // Liste mit 2 Elementen
Grässliche Einzelheiten treiben Experten zur Verzweiflung (besser nicht hinschauen).
kennen/initialisiererliste.txt · Zuletzt geändert: 2019-01-13 14:09 von 127.0.0.1