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
Libérer: 2024-10-23 17:59:03
original
400 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal