Maison >développement back-end >C++ >Les tableaux statiques peuvent-ils être initialisés par programme au moment de la compilation en C ?

Les tableaux statiques peuvent-ils être initialisés par programme au moment de la compilation en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-17 08:02:03376parcourir

 Can Static Arrays Be Programmatically Initialized at Compile Time in C  ?

Création de tableaux statiques par programme au moment de la compilation

En C, les tableaux statiques peuvent être initialisés au moment de la compilation pour contenir des valeurs spécifiques. Prenons l'exemple suivant :

const std::size_t size = 5;    
unsigned int list[size] = { 1, 2, 3, 4, 5 };

Question 1 : Attribution de valeurs par programme

Est-il possible d'attribuer ces valeurs par programme à l'aide de techniques de métaprogrammation au moment de la compilation ?

Réponse :

À l'aide des fonctionnalités C 0x, il est possible de créer des tableaux de modèles locaux ou membres et de les initialiser à partir d'une liste d'arguments de modèle variadique. Cependant, cela est limité par la profondeur maximale d'instanciation du modèle et peut ne pas être pratique pour les grands tableaux.

Question 2 : affectation sélective

En supposant que certains éléments du tableau doivent avoir le même valeur alors que d'autres varient, l'affectation sélective peut-elle être effectuée par programme au moment de la compilation ?

Réponse :

À l'aide d'une métafonction de modèle, on peut créer un tableau de valeurs et utiliser pour initialiser partiellement un tableau statique. L'exemple suivant attribue de manière sélective des valeurs en fonction de l'index :

template<size_t index> struct MetaFunc { 
    enum { value = index + 1 }; 
};

void test() {
    const std::size_t size = 7;
    typedef generate_array<size, MetaFunc>::result A;

    for (std::size_t i=0; i<size; ++i) { 
        if (i <= 1 || i >= 4) {
            A::data[i] = 0;
        }
    }
}

En tirant parti des métafonctions du modèle, une affectation sélective peut être réalisée de manière programmatique tout en garantissant une évaluation 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