Maison >développement back-end >C++ >Quand les accolades externes sont-elles requises dans les listes d'initialisation C pour `std::array` et les agrégats similaires ?
Lorsque les accolades externes ne peuvent pas être omises dans une liste d'initialisation
En C , les accolades externes sont requises pour les listes d'initialisation lorsqu'il s'agit de certains types de les structures agrégées, en particulier celles qui sont des types de données simples (POD) ou qui manquent de constructeurs définis par l'utilisateur. Contrairement à la plupart des conteneurs de la bibliothèque standard, std::array entre dans cette catégorie.
std::array Initialisation avec accolades
Considérez l'exemple suivant :
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
où A est une structure avec deux données membres. Le jeu supplémentaire d'accolades entourant {0, 0.1}, {2, 3.4} est essentiel car il initialise le tableau interne de std::array. Sans eux, le compilateur signalera l'erreur « trop d'initialiseurs ».
Initialisation directe du tableau
Ce comportement est analogue à l'initialisation directe du tableau :
Aarray a1 = { {0, 0.1}, {2, 3.4} };
Ici, les données du tableau interne de la structure Aarray sont initialisées directement. Sans les accolades externes, le compilateur rencontrerait la même erreur qu'avec std::array.
Comparaison avec les types scalaires
Lors de l'initialisation de tableaux de types scalaires comme double, Les accolades externes sont facultatives car les types scalaires ne sont pas des agrégats. Par exemple :
std::array<double, 2> a2 = {0.1, 2.3};
Dans ce cas, des accolades supplémentaires ne sont pas nécessaires puisque les données membres du tableau sont déjà directement initialisées par la liste d'initialisation {0.1, 2.3}.
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!