Maison > développement back-end > C++ > le corps du texte

Pourquoi GCC ne parvient-il pas à initialiser std :: array avec les listes d'initialisation ?

Linda Hamilton
Libérer: 2024-10-29 04:41:02
original
646 Les gens l'ont consulté

Why Does GCC Fail to Initialize std::array with Initialization Lists?

Listes d'initialisation et std::array : un bug GCC

La classe std::array de la bibliothèque standard C fournit un correctif conteneur de tableau de taille. Il est communément admis que cette classe prend en charge les listes d'initialisation.

Cependant, avec GCC 4.6.1, les tentatives d'initialisation des instances std::array en utilisant la syntaxe suivante échouent :

<code class="cpp">std::array<std::string, 2> strings = { "a", "b" };
std::array<std::string, 2> strings({ "a", "b" });</code>
Copier après la connexion

Malgré les listes d'initialisation en travaillant avec std::vector, ce comportement avec std::array a soulevé des questions sur la norme C ou un problème potentiel de GCC.

Fonctionnement interne de std::array

std::array est essentiellement une structure qui encapsule un tableau. Sa structure ressemble à :

<code class="cpp">template<typename T, int size>
struct std::array {
  T a[size];
};</code>
Copier après la connexion

Contrairement à std::vector, qui a un constructeur acceptant les listes d'initialisation, std::array n'a pas un tel constructeur.

Initialisation globale

Bien que std::array n'ait pas de constructeur explicite pour les listes d'initialisation, il est considéré comme un type d'agrégat en C 11. En tant que tel, il peut être initialisé par agrégat. Cependant, pour initialiser le tableau dans la structure, un jeu supplémentaire d'accolades est requis :

<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>
Copier après la connexion

Bug potentiel de GCC

La norme C permet l'omission de les accolades supplémentaires dans une telle initialisation. Par conséquent, il est probable que l'incapacité de GCC à gérer cette syntaxe sans eux soit un bug.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!