Maison  >  Article  >  développement back-end  >  Comment initialiser des tableaux constants dans les initialiseurs de classe C, avant et après C 11 ?

Comment initialiser des tableaux constants dans les initialiseurs de classe C, avant et après C 11 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 00:26:03557parcourir

How do I initialize constant arrays in C   class initializers, both before and after C  11?

Initialisation des tableaux constants dans les initialiseurs de classe en C

En C, lors de la déclaration de tableaux comme membres constants d'une classe, cela peut être difficile pour les initialiser dans le constructeur de classe grâce au qualificatif const. Cet article explore comment surmonter ce défi dans les contextes pré- et post-C 11.

Pré-C 11 :

Avant C 11, initialiser un const array dans un initialiseur de classe n'était pas directement possible en utilisant la syntaxe traditionnelle. Cependant, il existe une solution de contournement :

<code class="cpp">class a {
    const int *b;
    int b_size;
    
    // Constructor
    a(const int *b_array, int b_sz)
        : b(b_array), b_size(b_sz) {}
};

int main() {
    int b_array[] {2, 3};
    a a(b_array, sizeof(b_array) / sizeof(int));
    // Proceed with using class 'a'
}</code>

Dans cette approche, au lieu de déclarer le tableau comme membre direct, il est déclaré comme pointeur avec un membre de taille correspondant. Le constructeur est ensuite utilisé pour allouer et initialiser le pointeur.

Post-C 11 :

Avec l'introduction de C 11, l'initialisation des tableaux const dans les initialiseurs de classe est devenu plus simple :

<code class="cpp">struct a {
    const int b[2];
    
    // Constructor
    a() : b{2, 3} {}
};</code>

Dans cette syntaxe, les accolades {} qui suivent immédiatement la déclaration du membre de classe permettent l'initialisation directe du tableau const au sein du constructeur.

Ce changement en C 11 simplifie le processus d'initialisation des tableaux const dans les initialiseurs de classe et fournit une manière plus concise et élégante de définir de telles classes.

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