Maison > développement back-end > C++ > Pourquoi GCC 4.6.1 génère-t-il une erreur lors de l'initialisation d'un `std::array` avec des accolades ?

Pourquoi GCC 4.6.1 génère-t-il une erreur lors de l'initialisation d'un `std::array` avec des accolades ?

Mary-Kate Olsen
Libérer: 2024-10-29 06:42:31
original
597 Les gens l'ont consulté

Why does GCC 4.6.1 throw an error when initializing a `std::array` with braces?

std::array Initialisation avec accolades

En C , il existe deux manières courantes de créer un std::array à l'aide de l'initialisation lists :

<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

Cependant, si vous rencontrez une erreur de compilation concernant "l'expression primaire attendue avant le jeton ','" avec GCC 4.6.1, cela est dû à une légère particularité dans std::array.

Contrairement à std::vector, qui a un constructeur qui prend explicitement une liste d'initialiseurs, std::array est défini comme une struct:

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

En tant que tel, il n'a pas de constructeur qui accepte directement une liste d’initialiseurs. Au lieu de cela, il peut être initialisé à l'aide de l'initialisation globale.

Pour agréger correctement l'initialisation d'un tableau à l'intérieur de la structure std::array, 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

Il est il convient de noter que la norme C suggère que les accolades supplémentaires devraient être facultatives dans ce scénario. Par conséquent, l'erreur de compilation que vous avez rencontrée avec GCC 4.6.1 est probablement un bug du compilateur.

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