Un peu d'une question de base, mais j'ai de la difficulté à trouver une réponse définitive.Comment les champs de classe peuvent-ils être initialisés?
L'initialiseur répertorie-t-il les seulement façon d'initialiser les champs de classe en C++, à l'exception de l'affectation dans les méthodes?
Si j'utilise la mauvaise terminologie, voici ce que je veux dire:
class Test
{
public:
Test(): MyField(47) { } // acceptable
int MyField;
};
class Test
{
public:
int MyField = 47; // invalid: only static const integral data members allowed
};
EDIT: en particulier, est-il un bon moyen d'initialiser un champ struct avec un initialiseur struct? Par exemple:
struct MyStruct { int Number, const char* Text };
MyStruct struct1 = {}; // acceptable: zeroed
MyStruct struct2 = { 47, "Blah" } // acceptable
class MyClass
{
MyStruct struct3 = ??? // not acceptable
};
En C++ l'instance struct avec des accolades vides normalement pas être remis à zéro, mais contiendra des valeurs de garbage. Les exceptions peuvent être dans un environnement de débogage ou dans une situation similaire. –
@SEinarsson - oh ... avez-vous une référence pour ça? Les accolades vides sont recommandées sur tout le web pour l'initialisation des structures en C++. –
Attendez, maintenant je ne suis pas si sûr. J'ai trouvé des gens sur le web disant que je me trompe mais pas de définition formelle pour le pattern {}. La question suivante implique que les classes structs en C++ ont des constructeurs par défaut de mise à zéro, lorsqu'elles sont utilisées dans un initialiseur de classe (voir la deuxième réponse) http://stackoverflow.com/questions/112085/is-this-c-structure-initialization- Ne pas tenir compte de mon commentaire ci-dessus jusqu'à ce que je puisse clarifier cela. –