Initialisierung von Aggregaten in C++ (Initialisierung von Aggregaten in C++), Lektion, Seite 722660
https://www.purl.org/stefan_ram/pub/aggregatinitialisierung_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Initialisierung von Aggregaten in C++ 

Aggregate

Alle Reihungen  sind Aggregate.

Außerdem gelten bestimmte einfache Objekte als Aggregate, die Reihungen ähneln, weil sie als eine Folge einfacher Datenfelder angesehen werden können (vereinfacht gesagt).

Wir verwenden in dieser Lektion Reihungen  als Beispiele für Aggregate.

Aggregatinitialisierungen

Eine Aggregatinitialisierung erfolgt mit einer Initialisierungsliste. Deren Einträge werden zur Initialisierung der Komponenten des Objektes herangezogen, die sich an der entsprechenden Stelle befinden.

Falls es für eine Komponente eines Objektes keinen Eintrag gibt, so wird diese Komponente mit einem durch die Klasse des Objektes bestimmten Wert initialisiert, bei einer Reihung mit Komponenten elementarer Typen werden diese 0-initialisiert, bei einer Reihung mit Komponenten, deren Typ eine Klasse ist, werden diese mit dem Fehlkonstruktor initialisiert.

Beispiele

Beispiel

Bei den beiden folgenden Definitionen einer Reihung wird die Größe durch den Initialisierer festgelegt: die Reihung umfaßt 3 Komponenten. Die Komponenten haben die Werte 6, 4 und 7.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ { int const a[]{ 6, 4, 7 };
::std::cout << a[ 0 ]<< ", " << a[ 1 ]<< ", " << a[ 2 ]<< ".\n"s; }
{ int const a[] ={ 6, 4, 7 };
::std::cout << a[ 0 ]<< ", " << a[ 1 ]<< ", " << a[ 2 ]<< ".\n"s; }}

Protokoll

6, 4, 7.

6, 4, 7.

Beispiel

Bei den beiden folgenden Definitionen einer Reihung wird die Größe durch den Deklarator festgelegt (sie beträgt 3). Die drei Komponenten werden durch die jeweiligen Werte der Initialisierungsliste initialisiert.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ int const a[ 3 ]{ 6, 4, 7 };
::std::cout << a[ 0 ]<< ", " << a[ 1 ]<< ", " << a[ 2 ]<< ".\n"s; }

Protokoll
6, 4, 7.

Beispiel

Bei den beiden folgenden Definitionen einer Reihung wird die Größe durch den Deklarator festgelegt (sie beträgt 3). Die drei Komponenten werden durch die jeweiligen Einträge der Initialisierungsliste initialisiert. Die Komponenten ohne entsprechenden Eintrag in der Initialisierungsliste werden 0-initialisiert.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ int const a[ 3 ]{ 6, 4 };
::std::cout << a[ 0 ]<< ", " << a[ 1 ]<< ", " << a[ 2 ]<< ".\n"s; }

Protokoll
6, 4, 0.

Beispiel

Eine ganz leere  Initialisierungsliste führt entsprechend zur 0-initialisierung aller  Komponenten.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ int const a[ 3 ] {};
::std::cout << a[ 0 ]<< ", " << a[ 1 ]<< ", " << a[ 2 ]<< ".\n"s; }

Protokoll
0, 0, 0.

Beispiel

Wenn die Komponenten ohne Eintrag in der Initialisierungsliste Exemplare einer Klasse sind, werden sie mit dem Fehlkonstruktor  jener Klasse initialisiert. Bei der Klasse »::std::string« erzeugt der Fehlkonstruktor ein Objekt, welches die leere Zeichenfolge  repräsentiert.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ ::std::string const a[ 3 ]{ "a"s };

::std::cout << R"(")" <<
a[ 0 ]<< R"(", ")" <<
a[ 1 ]<< R"(", ")" <<
a[ 2 ]<< "\".\n"s; }

Protokoll
"a", "", "".

Zitate ↓

Zur Definition von Aggregaten ↓

Zitat C++ 2017e, 11.6.1 Aggregates [dcl.init.aggr] *
An aggregate is an array or a class with no user-provided, explicit, or inherited constructors, no private or protected non-static data members, no virtual functions, and no virtual, private, or protected base classes.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722660 stefan_ram:722660 Initialisierung von Aggregaten in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722660, slrprddef722660, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/aggregatinitialisierung_c++