Maison  >  Article  >  développement back-end  >  Pourquoi `std::vector` et `std::array` utilisent-ils une syntaxe différente pour les listes d'initialisation ?

Pourquoi `std::vector` et `std::array` utilisent-ils une syntaxe différente pour les listes d'initialisation ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 12:18:02726parcourir

Why do `std::vector` and `std::array` use different syntax for initializer lists?

Comprendre les différents comportements de la liste d'initialisation pour std::vector et std::array

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.

std::array : An Aggregate

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.

Initialisation globale en C

En C , l'initialisation globale peut être effectuée de deux manières :

  1. Ancien Style : En utilisant la syntaxe =:, par exemple std::array y = {{1, 2, 3, 4}};
  2. Initialisation directe de la liste : Passage direct d'une liste d'initialisation, par exemple, std::array y{1, 2, 3, 4};

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.

Un changement à venir

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 y{1, 2, 3, 4};

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!

Déclaration:
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