Initialisation du constructeur pour les tableaux C
L'initialisation de tableaux d'objets en C peut être difficile en raison de l'absence d'une syntaxe d'initialisation de tableau similaire à celle-là disponible pour les objets non-tableaux.
Considérez les objets non-tableaux suivants exemple :
struct Foo { Foo(int x) { /* ... */ } }; struct Bar { Foo foo; Bar() : foo(4) {} };
Dans cet exemple, le constructeur Bar initialise l'objet membre foo en utilisant la syntaxe d'initialisation : foo(4).
Cependant, pour les tableaux, la situation est différente. La syntaxe suivante est incorrecte :
struct Foo { Foo(int x) { /* ... */ } }; struct Baz { Foo foo[3]; // ??? I know the following syntax is wrong, but what's correct? Baz() : foo[0](4), foo[1](5), foo[2](6) {} };
Solution
Malheureusement, dans le contexte du C 98 (ce qui semble être le cas ici comme le suggère le processeur embarqué limitation), il n'existe aucun moyen de réaliser l'initialisation des membres du tableau à l'aide des initialiseurs de constructeur. La solution de contournement consiste à fournir un constructeur par défaut pour les membres du tableau et à effectuer toute initialisation nécessaire à l'intérieur du constructeur.
Par exemple :
struct Foo { Foo() : value(0) { /* ... */ } // Default constructor with a default value Foo(int x) { /* ... */ } }; struct Baz { Foo foo[3]; Baz() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); } };
Bien que cette approche ne soit pas aussi élégante que l'initialisation directe, elle permet de créer et d'initialiser des tableaux d'objets sans recourir à des méthodes d'initialisation externes ou à des constructions STL qui peuvent ne pas être disponibles dans les environnements embarqués.
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!