Pourquoi std::array n'a-t-il pas de constructeur avec une initialisation de valeur ?
std::array est une classe représentant un size tableau, mais il lui manque un constructeur qui prend une valeur pour tous ses éléments. L'absence d'un tel constructeur peut sembler déroutante, surtout lorsque des conteneurs dynamiques comme std::vector ont des constructeurs similaires.
Cette omission est intentionnelle, car std::array est conçu comme un type agrégé. Les agrégats en C sont des classes constituées uniquement de données membres et n'ont pas de constructeurs déclarés par l'utilisateur. En tant que tel, std::array ne peut être initialisé qu'avec des listes d'initialisation entre accolades ou via une construction de copie/déplacement.
Bien que std::array fournisse une méthode de remplissage pour attribuer des valeurs à tous les éléments, ce n'est pas un substitut. pour un constructeur avec initialisation de valeur. La méthode fill fonctionne sur un tableau déjà construit, initialisant ses éléments mais n'affectant pas l'état de la mémoire avant la construction.
Si vous devez initialiser tous les éléments d'un std::array avec une valeur particulière (-1 dans votre exemple), vous pouvez utiliser la construction par défaut suivie de fill:
<code class="cpp">std::array<int, 10> myArray; // default construction (uninitialized memory) myArray.fill(-1); // initialize all elements with -1</code>
La construction par défaut ne mettra pas à zéro la mémoire pour les agrégats, donc la méthode fill initialise correctement tous les éléments sans avoir besoin d'écraser les valeurs remises à zéro. Notez que ce comportement peut changer pour les types initialisables non trivialement.
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!