Maison >développement back-end >C++ >Comment initialiser correctement un `std::array` 2D en C à l'aide d'accolades ?

Comment initialiser correctement un `std::array` 2D en C à l'aide d'accolades ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-24 06:22:241051parcourir

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

Initialisation d'un std::array 2D avec des accolades

Lorsque vous travaillez avec C, l'initialisation d'un std::array 2D à l'aide d'accolades peut être un défi . L'extrait de code suivant illustre le problème :

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

Cette approche ne parvient pas à se compiler, l'erreur du compilateur indiquant trop d'initialiseurs pour std::array, 2u>. Pour comprendre pourquoi cela se produit, il est crucial de connaître l'implémentation sous-jacente de std::array.

std::array Internals

std::array est un agrégat qui englobe un tableau de style C. Par conséquent, pour l'initialiser correctement, il nécessite des accolades externes pour la classe elle-même et des accolades internes pour le membre du tableau C :

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

L'extension de cette logique à un tableau 2D entraîne l'initialisation valide suivante :

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

Dans cet exemple :

  • "{ { {1, 2, 3} }, { { 4, 5, 6} } }" sont les accolades de classe, entourant l'initialisation du tableau 2D.
  • "{{1, 2, 3}, {4, 5, 6}}" sont les accolades pour les tableaux internes de style C, initialiser chaque ligne du tableau 2D.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn