"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi GCC ne parvient-il pas à initialiser std :: array avec les listes d'initialisation ?

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

Publié le 2024-11-19
Parcourir:876

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 à l'aide de la syntaxe suivante échouent :

std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });

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

std::array's Inner Workings

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

template
struct std::array {
  T a[size];
};

Contrairement à std::vector, qui a un constructeur acceptant les listes d'initialisation, std::array ne dispose pas d'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égation en C 11. En tant que tel, il peut être agrégé initialisé. Cependant, pour initialiser le tableau dans la structure, un jeu supplémentaire d'accolades est requis :

std::array<:string> strings = {{ "a", "b" }};

Bogue potentiel de GCC

La norme C permet l'omission des 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3