Comportement de la liste d'initialisation : différences entre std::vector et std::array
Alors que std::vector et std::array sont les deux conteneurs en C , leur comportement avec les listes d'initialisation diffère. Dans cet article, nous explorerons les subtilités de l'initialisation d'agrégat et comprendrons pourquoi des accolades doubles sont requises pour std::array.
Considérez l'extrait de code suivant qui initialise un std::vector et un std:: tableau :
std::vectorx{1,2,3,4}; std::array y{{1,2,3,4}};
std::initialisation vectorielle
std::vecteur pris en charge constructeurs définis par l'utilisateur, y compris ceux qui acceptent un std::initializer_list. Par conséquent, nous pouvons initialiser directement x à l'aide d'accolades sans avoir besoin d'accolades supplémentaires. est un agrégat qui n'a pas de constructeurs définis par l'utilisateur. Au lieu de cela, il s'appuie sur l'initialisation globale, une fonctionnalité héritée de C.
Dans l'initialisation globale "à l'ancienne", le signe égal et les deux-points sont utilisés :std::array
Cependant, lors de l'utilisation de l'initialisation directe de liste (introduite en C 11), la syntaxe this = n'est plus valide. De plus, l'élision des accolades, qui permet d'omettre les accolades supplémentaires, n'est autorisée que dans les déclarations avec l'ancienne syntaxe style =. Pour l'initialisation directe de la liste, des accolades supplémentaires sont obligatoires.
Défaut CWGstd::arrayy = { { 1, 2, 3, 4 } };
Un rapport de défaut CWG (défaut CWG #1270) vise à résoudre cette restriction en permettant l'élision des accolades pour d'autres formes d'initialisation de liste. S'il est adopté, le code suivant serait bien formé :
std::array
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3