Comment initialiser des tableaux d'objets en C
En C, initialiser un tableau d'objets peut sembler simple, mais il y a quelques subtilités à résoudre considérer. Considérez les définitions de structure et de classe suivantes :
struct Foo { Foo(int x) { /* ... */ } }; struct Bar { Foo foo; Bar() : foo(4) {} // Valid initialization }; struct Baz { Foo foo[3]; // Incorrect initialization Baz() : foo[0](4), foo[1](5), foo[2](6) {} };
L'initialisation de Bar à l'aide de foo(4) est valide car elle invoque le constructeur de Foo pour initialiser le membre foo. Cependant, la tentative d'initialisation de Baz de la manière fournie est incorrecte.
Corriger l'initialisation du tableau
Contrairement à Bar, où il existe un seul objet de type Foo, Baz contient trois objets du même type. Pour initialiser correctement le tableau d'objets dans Baz, l'approche suivante doit être adoptée :
Baz() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); }
Cela appelle explicitement le constructeur pour chaque objet du tableau.
Solution de contournement pour Embedded Processeurs
En l'absence de constructions de bibliothèque standard telles que std :: vector, une approche alternative consiste à utiliser un constructeur par défaut ainsi qu'une méthode d'initialisation explicite, telle que init(), vous permettant de différer l'initialisation jusqu'après la construction :
Baz() {} void Baz::init() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); }
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!