Maison  >  Article  >  développement back-end  >  Comment initialiser des tableaux de membres avec des listes d'initialisation en C 0x ?

Comment initialiser des tableaux de membres avec des listes d'initialisation en C 0x ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 17:25:29792parcourir

How to Initialize Member Arrays with Initializer Lists in C  0x?

Initialisation de tableaux de membres avec des listes d'initialisation

En C 0x, vous pouvez rencontrer l'erreur « types incompatibles dans l'affectation » lorsque vous tentez d'initialiser un tableau de membres avec une liste d'initialisation .

Pour résoudre ce problème, envisagez plutôt d'utiliser un constructeur de modèle variadique :

<code class="cpp">struct foo {
    int x[2];
    template <typename... T>
    foo(T... ts) : x{ts...} {}
};

int main() {
    // Usage
    foo f1(1, 2);   // OK
    foo f2{1, 2};   // Also OK
    foo f3(42);    // OK; x[1] zero-initialized
    foo f4(1, 2, 3); // Error: too many initializers
    foo f5(3.14);  // Error: narrowing conversion not allowed
    foo f6("foo"); // Error: no conversion from const char* to int
}</code>

Si la préservation du statut « const » n'est pas essentielle, vous pouvez également utiliser une fonction pour charger les valeurs du tableau. :

<code class="cpp">struct foo {
    int x[2];
    foo(std::initializer_list<int> il) {
        std::copy(il.begin(), il.end(), x);
    }
};</code>

Cependant, cette approche renonce à la vérification des limites au moment de la compilation.

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