Maison >développement back-end >C++ >Pourquoi ne puis-je pas initialiser un std::array 2D comme un tableau 2D classique ?

Pourquoi ne puis-je pas initialiser un std::array 2D comme un tableau 2D classique ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-22 06:28:11473parcourir

Why Can't I Initialize a 2D std::array Like a Regular 2D Array?

La raison de l'initialisation limitée de std::array 2D

Bien que std::array soit un conteneur très concis, il existe certains restrictions lors de l'initialisation des tableaux 2D. Voyons pourquoi une initialisation simple comme celle-ci ne fonctionne pas :

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

Erreur : trop d'initialiseurs pour 'std::array, 2u>'

La clé pour comprendre cette erreur est que std::array est essentiellement une structure de données contenant un tableau C. Par conséquent, pour initialiser un std::array 2D, des accolades supplémentaires sont nécessaires :

std::array<std::array<int, 3>, 2> a {
    {{1, 2, 3}},   // 内层花括号用于初始化 C 数组
    {{4, 5, 6}}
};

Cette imbrication d'accolades supplémentaire permet au compilateur d'attribuer correctement les données d'initialisation aux membres du tableau C. Par conséquent, même si std::array est une classe C, sa syntaxe d'initialisation est similaire à celle d'un tableau C.

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