"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-08
Parcourir:735

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 :

struct foo {
    int x[2];
    template 
    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
}

Si conserver le statut 'const' n'est pas essentiel, vous pouvez également utiliser une fonction pour charger les valeurs du tableau :

struct foo {
    int x[2];
    foo(std::initializer_list il) {
        std::copy(il.begin(), il.end(), x);
    }
};

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3