Maison >développement back-end >C++ >`std::vector::resize()` et `boost::container::vector::resize()` présentent-ils un comportement d'initialisation zéro cohérent dans les normes C ?
Le comportement de Vector::resize() est-il cohérent sous C 11 et Boost.Container ?
Le comportement de std::vector:: resize() est couramment utilisé pour mettre temporairement les données en mémoire tampon, en les redimensionnant à la taille appropriée avant utilisation. En C 03, std::vector::resize() a créé de nouveaux éléments en les copiant, mais C 11 a introduit une surcharge qui initialise les nouveaux éléments sans copier.
Boost.Container fournit une surcharge default_init supplémentaire pour boost:: containers::vector::resize(), qui initialise les nouveaux éléments avec les valeurs par défaut. Cette fonctionnalité s'aligne sur la philosophie de conception de C 11 consistant à ne payer que pour ce dont vous avez besoin.
Après avoir testé le comportement de std::vector et boost::container::vector dans les modes C 03 et C 11, des résultats inattendus ont été observés. Dans C 03 et C 11, le redimensionnement du vecteur sans spécifier l'initialisation entraînait toujours une initialisation nulle des nouveaux éléments pour std::vector et boost::container::vector.
Ce comportement indique que l'interface change dans std::vector n'a aucun effet sur l'implémentation, et les éléments finaux ajoutés dans resize() sont toujours initialisés avec des zéros. La question soulevée est de savoir si ce comportement est correct.
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!