Maison >développement back-end >C++ >Pourquoi `std::vector` et `std::array` nécessitent-ils des syntaxes d'initialisation différentes ?
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};
Cependant, lorsqu'il s'agit de std::arrays, des doubles accolades sont requises :
std::array<int, 4> y{{1,2,3,4}};
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 } };
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 };
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!