Maison > développement back-end > C++ > Pouvez-vous utiliser des initialiseurs de constructeur pour les membres d'un tableau en C ?

Pouvez-vous utiliser des initialiseurs de constructeur pour les membres d'un tableau en C ?

Barbara Streisand
Libérer: 2024-11-07 08:33:02
original
198 Les gens l'ont consulté

Can You Use Constructor Initializers for Array Members in C  ?

Initialiseurs de constructeur pour les membres d'un tableau en C

Lorsque vous travaillez avec des tableaux d'objets en C, les initialiser correctement peut être une tâche difficile. Cet article explore les limitations et les solutions de contournement pour l'utilisation d'initialiseurs de constructeur pour les membres du tableau.

Initialisation hors tableau

Dans l'exemple hors tableau, la barre de structure peut initialiser son membre foo utilisant un initialiseur de constructeur :

struct Bar {
    Foo foo;

    Bar() : foo(4) {}
};
Copier après la connexion

Initialisation du tableau

Cependant, dans l'exemple de tableau, la structure Baz ne peut pas initialiser son membre du tableau foo en utilisant la même syntaxe :

struct Baz {
    Foo foo[3];

    // Incorrect
    Baz() : foo[0](4), foo[1](5), foo[2](6) {}
};
Copier après la connexion

Limitations

En C , les tableaux ne prennent pas en charge les constructeurs. Par conséquent, les membres du tableau sont initialisés par défaut avant toute initialisation d’objet. Par conséquent, il n'est pas possible d'initialiser les membres du tableau directement à l'aide des initialiseurs du constructeur.

Solution de contournement

La solution fournie dans la question consiste à utiliser une solution de contournement. Étant donné que les constructions STL comme std::vector ne sont pas disponibles, un constructeur par défaut est créé avec une méthode init() explicite pour l'initialisation post-construction. Cela évite complètement le besoin d'initialiseurs de constructeur.

Solution alternative

La réponse de Barry suggère une approche plus récente. Si l'environnement de développement prend en charge les normes C au-delà de C 98, une syntaxe plus récente est disponible :

struct Baz {
    Foo foo[3]{4, 5, 6};
};
Copier après la connexion

Cette syntaxe permet l'initialisation des membres du tableau à l'aide d'accolades, éliminant ainsi le besoin d'un constructeur par défaut et d'une méthode d'initialisation explicite.

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