Maison >développement back-end >C++ >Pourquoi std::array n'a-t-il pas de constructeur avec initialisation de valeur ?

Pourquoi std::array n'a-t-il pas de constructeur avec initialisation de valeur ?

DDD
DDDoriginal
2024-10-23 17:59:03393parcourir

Why Does std::array Lack a Constructor with Value Initialization?

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!

Déclaration:
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