Lors de l'omission des accolades externes dans les listes d'initialisation
En C, lors de l'initialisation d'un type d'agrégat tel qu'une structure ou un tableau, vous pouvez être confronté au question de savoir s'il faut ou non utiliser des accolades externes dans la liste d'initialisation. Dans le cas de types d'agrégats POD (Plain Old Data) et n'ayant aucun constructeur défini par l'utilisateur, tels que std::array, des accolades externes sont requises. Cependant, pour les agrégats qui n'ont pas cette restriction, comme les types intégrés, ces accolades peuvent être omises.
Accolades explicites pour les agrégats POD
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
le compilateur signale "trop d'initialiseurs" car les accolades internes sont manquantes. L'initialisation correcte avec des accolades est :
std::array<A, 2> a1 = { {{ {0, 0.1}, {2, 3.4} }} };
Élimination des accolades pour les agrégats non-POD
Contrairement aux agrégats POD, les agrégats non-POD comme les types intégrés ne nécessitent pas d'accolades externes explicites dans les listes d'initialisation. Par exemple, votre exemple :
std::array<double, 2> a2 = {0.1, 2.3};
n'inclut pas d'accolades pour le tableau interne. En effet, double n'est pas un agrégat et la liste d'initialisation initialise directement les éléments doubles constitutifs.
Informations supplémentaires de la norme
La norme C fournit des indications sur le moment où les accolades extérieures peuvent être omises dans les listes d'initialisation :
Cela permet l'initialisation avec et sans accolades, à condition que le nombre de clauses d'initialisation correspond au nombre de membres à initialiser.
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!