Maison > développement back-end > C++ > Pourquoi `std::vector` et `std::array` nécessitent-ils des syntaxes d'initialisation différentes ?

Pourquoi `std::vector` et `std::array` nécessitent-ils des syntaxes d'initialisation différentes ?

Susan Sarandon
Libérer: 2024-11-06 21:09:02
original
1093 Les gens l'ont consulté

Why Do `std::vector` and `std::array` Require Different Initialization Syntaxes?

Pourquoi le comportement divergent des listes d'initialisation std::Vector et std::Array ?

Lors de l'initialisation des objets des deux std :: vector et std::array structures de données en C , une différence notable apparaît dans leur syntaxe. std::vectors peut être initialisé avec des accolades, comme dans :

std::vector<int> x{1,2,3,4};
Copier après la connexion

Cependant, lorsqu'il s'agit de std::arrays, des doubles accolades sont requises :

std::array<int, 4> y{{1,2,3,4}};
Copier après la connexion

La raison car cet écart provient de la nature sous-jacente de ces structures de données. std::arrays sont des agrégats—des objets sans constructeurs définis par l'utilisateur ou même prenant explicitement une std::initializer_list.

L'initialisation avec accolades pour std::arrays relève donc de initialisation globale, héritée de C. Dans l'initialisation globale, l'"ancien style" utilisant =: est utilisé :

std::array<int, 4> y = { { 1, 2, 3, 4 } };
Copier après la connexion

Cette syntaxe permet l'élision d'accolades supplémentaires dans "une déclaration de la forme Tx = { une };". Cependant, cette règle ne s'étend pas aux autres formes d'initialisation de liste, y compris celle utilisée dans le deuxième extrait de code.

Un rapport de défauts du CWG (#1270) met en évidence cette restriction. Si la résolution proposée est acceptée, l'élision des accolades sera étendue pour inclure d'autres formes d'initialisation de liste, faisant potentiellement de ce qui suit une syntaxe valide :

std::array<int, 4> y{ 1, 2, 3, 4 };
Copier après la connexion

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