241 votes

Les membres d'une structure C++ sont-ils initialisés à 0 par défaut ?

J'ai ceci struct :

   struct Snapshot
    {
        double x; 
        int   y ;

    };

Je veux x et y seront 0. Seront-ils 0 par défaut ou dois-je faire :

Snapshot s= {0,0};

Quelles sont les autres façons de remettre la structure à zéro ?

2voto

Eric Points 4139

Je crois que la réponse correcte est que leurs valeurs sont indéfinies. Souvent, ils sont initialisés à 0 lors de l'exécution des versions de débogage du code. Ce n'est généralement pas le cas lors de l'exécution des versions release.

2voto

finnw Points 24592

Comme il s'agit d'un POD (essentiellement un struct C), il n'y a pas de mal à l'initialiser à la manière C :

Snapshot s;
memset(&s, 0, sizeof (s));

ou de manière similaire

Snapshot *sp = new Snapshot;
memset(sp, 0, sizeof (*sp));

Je n'irais pas jusqu'à utiliser calloc() dans un programme C++ cependant.

1voto

Bruno Martinez Points 845

Déplacez les membres du pod vers une classe de base pour raccourcir votre liste d'initialisation :

struct foo_pod
{
    int x;
    int y;
    int z;
};

struct foo : foo_pod
{
    std::string name;
    foo(std::string name)
        : foo_pod()
        , name(name)
    {
    }
};

int main()
{
    foo f("bar");
    printf("%d %d %d %s\n", f.x, f.y, f.z, f.name.c_str());
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X