Maison > développement back-end > C++ > 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
Libérer: 2024-11-03 00:26:03
original
604 Les gens l'ont consulté

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

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

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal