Heim >Backend-Entwicklung >C++ >Wie initialisiere ich ein 2D-`std::array` in C mithilfe von geschweiften Klammern korrekt?

Wie initialisiere ich ein 2D-`std::array` in C mithilfe von geschweiften Klammern korrekt?

Linda Hamilton
Linda HamiltonOriginal
2024-11-24 06:22:241048Durchsuche

How to Correctly Initialize a 2D `std::array` in C   Using Braces?

Initialisierung eines 2D-std::array mit geschweiften Klammern

Beim Arbeiten mit C kann die Initialisierung eines 2D-std::array mit geschweiften Klammern eine Herausforderung sein . Der folgende Codeausschnitt veranschaulicht das Problem:

std::array<std::array<int, 3>, 2> a {
    {1, 2, 3},
    {4, 5, 6}
};

Dieser Ansatz kann nicht kompiliert werden, da der Compilerfehler darauf hinweist, dass zu viele Initialisierer für std::array, 2u> vorhanden sind. Um zu verstehen, warum dies geschieht, ist es wichtig, die zugrunde liegende Implementierung von std::array zu kennen.

std::array Internals

std::array ist ein Aggregat, das umfasst ein Array im C-Stil. Um es korrekt zu initialisieren, sind daher äußere geschweifte Klammern für die Klasse selbst und innere geschweifte Klammern für das C-Array-Mitglied erforderlich:

std::array<int, 3> a1 = { { 1, 2, 3 } };

Die Erweiterung dieser Logik auf ein 2D-Array führt zu der folgenden gültigen Initialisierung:

std::array<std::array<int, 3>, 2> a2 { { { {1, 2, 3} }, { { 4, 5, 6} } } };

In diesem Beispiel:

  • "{ { {1, 2, 3} }, { { 4, 5, 6} } }" sind die geschweiften Klammern der Klasse, die die Initialisierung des 2D-Arrays einschließen.
  • "{{1, 2, 3}, {4, 5, 6}}" sind die geschweiften Klammern Für die inneren Arrays im C-Stil wird jede Zeile des 2D-Arrays initialisiert.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein 2D-`std::array` in C mithilfe von geschweiften Klammern korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn