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
Barbara Streisandoriginal
2024-11-07 08:33:02189parcourir

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) {}
};

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) {}
};

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};
};

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!

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