Maison > Article > développement back-end > Pourquoi `std::vector` et `std::array` utilisent-ils une syntaxe différente pour les listes d'initialisation ?
Lors de l'utilisation de listes d'initialisation pour initialiser des conteneurs, un Vous avez peut-être remarqué une différence de syntaxe entre std :: vector et std :: array. Alors que std::vector s'initialise à l'aide d'accolades simples {}, std::array nécessite des accolades doubles {{}}. Pour comprendre pourquoi cette distinction existe, nous approfondissons les propriétés fondamentales de ces conteneurs.
Contrairement à std::vector, qui a des constructeurs définis par l'utilisateur, std::array est considéré comme un type d'agrégat. Cela signifie qu'il lui manque des constructeurs déclarés par l'utilisateur, y compris ceux qui acceptent les listes d'initialisation. L'initialisation de std::array repose donc sur l'initialisation globale, une fonctionnalité C héritée de C.
En C , l'initialisation globale peut être effectuée de deux manières :
Avec l'ancien style, les accolades supplémentaires pouvaient être supprimées lors de l'initialisation dans une déclaration. Cependant, cette option n'est pas disponible pour l'initialisation directe de liste.
Le défaut CWG n° 1270 cherche à résoudre cette restriction, permettant l'élision d'accolades dans d'autres formes d’initialisation de liste. Si elle est approuvée, la syntaxe suivante deviendra valide :
std::array
Ce changement éliminerait la disparité actuelle de syntaxe entre std::vector et std::array, assurant ainsi la cohérence des pratiques d'initialisation globale.
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!