Un peu d'une question de base, mais j'ai du mal à suivre une réponse définitive.
Initializer répertorie le moyen em> em> pour initialiser les champs de classe en C ++, en dehors de l'affectation des méthodes ? p>
Si j'utilise la mauvaise terminologie, voici ce que je veux dire: p> edit strong>: en particulier, Y a-t-il une bonne façon d'initialiser un champ d'installation avec un initialiseur de structure? Par exemple: p>
4 Réponses :
La manière recommandée et préférée consiste à initialiser tous les champs du constructeur, comme dans votre premier exemple. Ceci est également valable pour les structures. Voyez ici: Initialisation de la structure statique TM dans une classe P>
Les membres statiques peuvent être initialisés différemment:
struct stype { const char *str; int val; }; stype initialSVal = { "hi", 7 }; class Test { public: Test(): s(initialSVal) {} stype s; };
en C ++ x0 La deuxième manière devrait également fonctionner. p>
Les initialiszer répertorie le seul moyen d'initialiser les champs de classe en C ++? P> blockQuote>
Dans votre cas avec votre compilateur: Oui. P>
juste pour mentionner que dans certains cas, vous n'avez d'autre choix que d'utiliser des listes d'initialiseur pour définir la valeur d'un membre sur la construction:
class A { private: int b; const int c; public: A() : b(1), c(1) { // Here you could also do: b = 1; // This would be a reassignation, not an initialization. // But not: c = 1; // You can't : c is a const member. } };
En C ++, l'instance de struct avec des accolades vides ne sera normalement pas mise à zéro, mais contiendra des valeurs de déchets. Des exceptions peuvent être dans un environnement de débogage ou une situation contrôlée de la même manière.
@Seinarsson - Oh ... Avez-vous une référence pour cela? Les accolades vides sont recommandées sur le Web pour initialiser les structures en C ++.
Attendez, maintenant je ne suis pas si certain. J'ai trouvé des gens sur le Web en disant que je me trompe mais aucune définition formelle pour le motif {}. La question suivante implique que les catégories de structures en C ++ ont la réduction des constructeurs par défaut, lorsqu'ils sont utilisés dans une initialiseur de classe (voir la deuxième réponse) Stackoverflow.com/Questtions/112085/... ne pas tenir compte de mon commentaire ci-dessus jusqu'à ce que je puisse clarifier cela.