namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:initialisiererliste

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 rrichter