Ce qui se passe ici est appelé agrégat d'initialisation. Voici la (nom abrégé) définition d'un agrégat à partir de la section 8.5.1 de l'ISO spec:
Un agrégat est un tableau ou une classe sans que l'utilisateur n'-a déclaré constructeurs, sans privés ou protégés non-membres de données statiques, pas de classes de base, et pas de fonctions virtuelles.
Maintenant, à l'aide de {0} pour initialiser un agrégat comme c'est un truc à 0 l'ensemble de la chose. C'est parce que lors de l'utilisation globale de l'initialisation , vous n'avez pas à spécifier tous les membres et la spécification exige que tous les non spécifié membres être initialisé par défaut, ce qui signifie que définie à 0 pour les types simples.
Voici la citation de la spécification:
Si il y a moins d'initialiseurs dans la liste qu'il y a de membres dans le
d'agrégation, puis chaque membre
explicitement initialisée est
par défaut-initialisé.
Exemple:
struct S { int a; char* b; int c; };
S ss = { 1, "asdf" };
initialise ss.une avec 1, ss.b avec
"asdf", et ss.c avec la valeur d'un
expression de la forme int(), qui est,
0.
Vous pouvez trouver l'complet spec sur ce sujet ici:
http://www.kuzbass.ru:8086/docs/isocpp/decl.html#dcl.init.aggr